js--前端开发工作中常见的时间处理问题
前言
在前端开发工作中,服务端返回的时间数据或者你传递给服务端的时间参数经常会遇到时间格式转换及处理问题。这里分享一些我收集到的一些处理方法,方便日后工作中快速找到。先附上必须了解的知识内置对象传送门https://www.w3school.com.cn/js/js_dates.asp
目录
- 时间格式化
- 获取当年的第一天
- 获取指定年指定月份的第一天
- 获取指定年指定月份的最后一天
- 获取当前季度的第一天
- 获取两个日期的相差天数
- 获取指定的某一天所在的星期范围
- 获取指定的某一天还差几天过年
- 获取指定的某一天是星期几
- 比较传入的两个日期中第一个日期是否比另外一个日期早
- 计算某一时间偏移后的日期
正文
时间格式化
1 Date.prototype.formatDate=function(format){
2 var o = {
3 "M+": this.getMonth()+1 , //月份
4 "d+": this.getDate(), //日
5 "h+": this.getHours(), //小时
6 "m+": this.getMinutes(), //分
7 "s+": this.getSeconds(), //秒
8 "q+": Math.floor((this.getMonth() + 3) / 3), // 季度
9 "S": this.getMilliseconds() // 毫秒
10 };
11 // 根据y的长度来截取年
12 if (/(y+)/.test(format)){
13 //console.log(RegExp.$1);yyyy
14 format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
15 }
16
17 // console.log(format);1999-MM-DD
18 for (var k in o){
19 if (new RegExp("(" + k + ")").test(format))
20 format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
21 }
22 return format;
23 }
24 // 用法:
25 var time1 = new Date(99,3,2).formatDate("yyyy-MM-dd");
26 var time2 = new Date().formatDate("yyyy-MM-dd hh:mm:ss");
27 console.log(time1);//1999-04-02
28 console.log(time2);//2020-11-15 21:21:55
获取当年的第一天
function getFirstDayOfYear () {
var date = new Date();
date.setDate(1);
date.setMonth(0);
return date.formatDate('yyyy-MM-dd');;
}
console.log(getFirstDayOfYear())//2020-1-1
获取指定年指定月份的第一天
function getCurrentMonthFirstDay(currentMonth) {
var endDate=new Date(currentMonth)
var month=endDate.getMonth();
var currentMonthFirstDay=new Date(endDate.getFullYear(),month,1)
var firstDate=currentMonthFirstDay.toLocaleDateString().replace(new RegExp("/","g"),"-")
return firstDate
}
console.log(getCurrentMonthFirstDay('2020-11'))//2020-11-1
获取指定年指定月的最后一天
function getCurrentMonthLastDay(currentMonth) {
var endDate=new Date(currentMonth)
var month=endDate.getMonth();
var nextMonth=++month;
var nextMonthFirstDay=new Date(endDate.getFullYear(),nextMonth,1);
var oneDay=1000*60*60*24;
var dateString=new Date(nextMonthFirstDay-oneDay)
return dateString.toLocaleDateString().replace(new RegExp("/","g"),"-")
}
console.log(getCurrentMonthLastDay("2020-11"))//2020-10-30
获取当前季度的第一天
function getFirstDayOfSeason () {
var date = new Date();
var month = date.getMonth();
if(month <3 ){
date.setMonth(0);
}else if(2 < month && month < 6){
date.setMonth(3);
}else if(5 < month && month < 9){
date.setMonth(6);
}else if(8 < month && month < 11){
date.setMonth(9);
}
date.setDate(1);
return date.formatDate('yyyy-MM-dd');;
}
console.log(getFirstDayOfSeason())//2020-10-01
获取两个日期的相差天数
function getDiff(startDate, endDate) {
var stime = Date.parse(new Date(startDate));
var etime = Date.parse(new Date(endDate));
// 两个时间戳相差的毫秒数
var usedTime = etime - stime;
// 计算相差的天数
var days = Math.floor(usedTime / (24 * 3600 * 1000));
// 计算天数后剩余的毫秒数
var leave1 = usedTime % (24 * 3600 * 1000);
// 计算出小时数
var hours = Math.floor(leave1 / (3600 * 1000));
// 计算小时数后剩余的毫秒数
var leave2 = leave1 % (3600 * 1000);
// 计算相差分钟数
var minutes = Math.floor(leave2 / (60 * 1000));
var time = days + "天" + hours + "时" + minutes + "分";
return time;
}
console.log(getDiff("2020-10-01","2020-11-20"))//50天0时0分
获取指定的某一天所在的星期范围
function getWeekRange(date) {
if(!date) return
var now = new Date(date);
var nowDayOfWeek = now.getDay(); // 星期日—>六(0->6)
var nowDay = now.getDate();
var nowMonth = now.getMonth();
var nowYear = now.getYear(); // 2019年是119
nowYear += (nowYear < 2000) ? 1900 : 0;
var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek+1); // 这周的周五
var weekEndDate = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek)); // 7- 这周的周日 && 用5- 得到这的周五
return weekStartDate.formatDate('yyyy-MM-dd') + " 至 " + weekEndDate.formatDate('yyyy-MM-dd');
}
console.log(getWeekRange("2020-11-11"))//2020-11-09 至 2020-11-15
获取指定的某一天还差几天过年
function restDayOfYear() {
var fullyear = new Date().getFullYear();
var nextyear = fullyear + 1;
var lastday = new Date(new Date(nextyear,0,1) - 1); //本年的最后一毫秒:
var now = new Date();
var diff = lastday - now; //毫秒数
return Math.ceil(diff / (1000 * 60 * 60 * 24));
}
console.log(restDayOfYear("2020-11-15"))//47
获取指定的某一天是星期几
function getWeekZh(value) {
var dateArray = value.split("-");
var zhWeek = "星期" + "日一二三四五六".charAt(new Date(dateArray[0], parseInt(dateArray[1] - 1), dateArray[2]).getDay());
return zhWeek
}
console.log(getWeekZh("2020-10-10"))//星期六
比较传入的两个日期中第一个日期是否比另外一个日期早
function compareDate(firstDate,secondDate){
var arrayD1 = firstDate.split("-");
var date1 = new Date(arrayD1[0],arrayD1[1],arrayD1[2]);
var arrayD2 = secondDate.split("-");
var date2 = new Date(arrayD2[0],arrayD2[1],arrayD2[2]);
//日期对象可以直接进行比较
if(date1 < date2) return true;
return false;
}
console.log(compareDate("2020-10-10","2020-11-15"))//true
计算某一时间偏移后的日期
function getAfterDate(time,count) {
time.setDate(time.getDate() + count);//获取N天后的日期
var date = new Date(+time + 8 * 3600 * 1000);
return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.');
}
console.log(getAfterDate(new Date(),100))// 2021.02.23 22:00:36
js--前端开发工作中常见的时间处理问题的更多相关文章
- JS前端开发判断是否是手机端并跳转操作(小结)
JS前端开发判断是否是手机端并跳转操作(小结) 这篇文章主要介绍了JS前端开发判断是否是手机端并跳转操作,非常不错,具有参考借鉴价值,需要的朋友可以参考下 常用跳转代码 ? 1 2 3 4 5 6 7 ...
- MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP
MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP,其中 DATE 类型用于表示日期,但是不会包含时间,格式为 YYYY-MM-DD,而 DATETIME 和 T ...
- Visual Studio 2015初体验——前端开发工作的问题
前言 因为后台项目开发适用的VS2015,为了跟后台开发配合,前端部门也统一从VS2013升级到了VS2015. 因为C盘空间不足要先卸载,这里就不说卸载2013时花了多长时间,只说安装2015时用了 ...
- css布局 - 工作中常见的两栏布局案例及分析
突然想到要整理这么一篇平时工作中相当常见但是我们又很忽视的布局的多种处理方法.临时就在我经常浏览的网站上抓的相对应的截图.(以后看到其他类型的我再补充) 既然截了图,咱们就直接看人家使用的布局方式,毕 ...
- [前端] 记录工作中遇到的各种问题(Bug,总结,记录)
最近一年,在开发实践过程中遇到了不少问题,大多都能得到解决 部分知其原理,部分只能做到解决问题,而半年前遇到的问题,或多或少都忘得差不多了 是该记录一下一些问题,防止再遇到就得再查资料了 1. 浏览器 ...
- JS~~~ 前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!
前端开发一些常用技巧 模块化结构 &&&&& 命名空间处理 奇技淫巧!!!!!!2016-09-29 17 ...
- FIS.js前端开发的使用说明文档
文档结构 什么是FIS 部署FIS FIS基本使用 模块定义 加载方式 调用Tangram 2.0 一.什么是FIS FIS提供了一套贯穿开发流程的开发体系和集成开发环境,为产品线提供前端开发底层架构 ...
- 记录我开发工作中遇到HTTP跨域和OPTION请求的一个坑
我通过这篇文章把今天工作中遇到的HTTP跨域和OPTION请求的一个坑记录下来. 场景是我需要在部署在域名a的Web应用里用JavaScript去消费一个部署在域名b的服务器上的服务.域名b上的服务也 ...
- 总结工作中常见的linux命令
本文是总结下自己在工作中遇到的常见linux 命令,会持续更新! 1.文件路径切换 进入 cd 返回上一级 cd .. 2.复制 cp 源文件名 目标文件夹 cp log.log test5 3.编 ...
随机推荐
- 虚拟机搭建CentOS 7系统
准备工作先查看本机是否开启虚拟化 可以打开任务管理器中性能选项 可以看到虚拟化默认关闭,可通过打开BIOS,找到Configuration或Security选项,把Virtualization或者In ...
- Spring扩展之一:ApplicationContextInitializer
1.介绍 用于Spring容器ConfigurableApplicationContext在刷新之前初始化Spring的回调接口. 通常在需要对应用程序上下文进行一些编程初始化的Web应用程序中使用. ...
- Kubernetes K8S之Taints污点与Tolerations容忍详解
Kubernetes K8S之Taints污点与Tolerations容忍详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master C ...
- MediaCodec编码OpenGL速度和清晰度均衡
## 概述 在安卓平台为了实现h264视频编码,我们通常可以使用libx264, ffmpeg等第三方视频编码库,但是如果对编码的速度有一定的要求,要实现实时甚至超实时的高速视频编码,我们并没有太 ...
- Linux 文本处理批量查找与替换
# 搜索含有特定字符串在某个目录并打印出文件名grep -rl "www.baidu.com" /data* -r, --recursive like --directories= ...
- ctf-web-sql
姿势文章总结 freebuf http://www.freebuf.com/news/139288.html http://www.freebuf.com/articles/web/137094.ht ...
- C#实现SM2国密加密
本文主要讲解"国密加密算法"SM系列的C#实现方法,不涉及具体的算法剖析,在网络上找到的java实现方法比较少,切在跨语言加密解密上会存在一些问题,所以整理此文志之.JAVA实现参 ...
- Oracle数据泵的导入和导出
前言 今天王子要分享的内容是关于Oracle的一个实战内容,Oracle的数据泵. 网上有很多关于此的内容,但很多都是复制粘贴别人的,导致很多小伙伴想要使用的时候不能直接上手,所以这篇文章一定能让你更 ...
- 他凭借这70份PDF,3170页文件,成功斩获了含BATJ所有的offer
前言 最近我一直在面试高级工程师,不管初级,高级,程序员,我想面试前,大家刷题一定是是少不了吧. 我也一样,我在网上找了很多面试题来看,最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性 ...
- 来吧,展示!Redis的分布式锁及其实现Redisson的全过程
前言 分布式锁是控制分布式系统之间同步访问共享资源的一种方式. 在分布式系统中,常常需要协调他们的动作.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要 ...