众所周知,JavaScript核心包含Data()构造函数,用来创建表示时间和日期的对象。

今天主要跟大家梳理一下,常用的时间、日期处理方法,方便大家使用和理解

格式化时间

老生常谈,大概会这么写

1
2
3
4
5
6
7
8
9
10
11
var format = function (time) { 
var y = time.getFullYear(); //getFullYear方法以四位数字返回年份
var M = time.getMonth() + 1; // getMonth方法从 Date 对象返回月份 (0 ~ 11),返回结果需要手动加一
var d = time.getDate(); // getDate方法从 Date 对象返回一个月中的某一天 (1 ~ 31)
var h = time.getHours(); // getHours方法返回 Date 对象的小时 (0 ~ 23)
var m = time.getMinutes(); // getMinutes方法返回 Date 对象的分钟 (0 ~ 59)
var s = time.getSeconds(); // getSeconds方法返回 Date 对象的秒数 (0 ~ 59)
return y + '-' + M + '-' + d + ' ' + h + ':' + m + ':' + s;
} var time1 = format(new Date());

但是有什么问题呢?一般来说小于10的值,要在前面添加字符串‘0’的,我们大可以写个判断来解决他,但是太麻烦了~

其实可以这样

1
2
3
4
5
6
7
8
var format = function (time) { 
var date = new Date(+time + 8 * 3600 * 1000);
return date.toJSON().substr(0, 19).replace('T', ' ').replace(/-/g, '.');
}
var time1 = format(new Date()); //Date的‘toJSON’方法返回格林威治时间的JSON格式字符串,转化为北京时间需要额外增加8个时区,然后把‘T’替换为空格,即是我们需要的时间格式,后面可以通过正则将日期分隔符换成任何想要的字符。
//一元加操作符可以把任何数据类型转换成数字,所以获取时间对象对应毫秒数的另一个方法是+Date或Number(Date)

获取当月最后一天

一个月可能有28/29/30/31天,使用写死数据的方式来解决闰年和大小月显然是不科学的。

1
2
3
4
5
6
7
8
function getLastDayOfMonth (time) {
var month = time.getMonth();
time.setMonth(month+1);
time.setDate(0);
return time.getDate()
}
getLastDayOfMonth(new Date())
//先月份加一,再取上个月的最后一天

获取这个季度第一天

用来确定当前季度的开始时间,常用在报表中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getFirstDayOfSeason (time) {
var month = time.getMonth();
if(month <3 ){
time.setMonth(0);
}else if(2 < month && month < 6){
time.setMonth(3);
}else if(5 < month && month < 9){
time.setMonth(6);
}else if(8 < month && month < 11){
date.setMonth(9);
}
time.setDate(1);
return time;
}
getFirstDayOfSeason(new Date())
//先月份加一,再取上个月的最后一天

获取中文星期

这也是个比较常见的雪球,完全没必要写一长串switch啦,直接用charAt来解决。

1
let time ="日一二三四五六".charAt(new Date().getDay());

获取今天是当年的第几天

来看看今年自己已经浪费了多少时光~

1
2
3
4
var time1 = Math.ceil(( new Date() - new Date(new Date().getFullYear().toString()))/(24*60*60*1000));

//需要注意的是new Date()不设置具体时间的话new Date(2019)得到的不是0点而是8点 
//Tue Jan 01 2019 08:00:00 GMT+0800 (中国标准时间)

获取今天是当年的第几周

日历、表单常用

1
2
3
var week = Math.ceil(((new Date() - new Date(new Date().getFullYear().toString()))/(24*60*60*1000))/7);

//在获取第几天的基础上除7,向上取整

获取今天是当年还剩多少天

再来看看今年还有多少天可以浪费~

1
2
3
4
5
6
7
8
9
function restOfYear(time) {
var nextyear = (time.getFullYear() + 1).toString();
var lastday = new Date(new Date(nextyear)-1); //获取本年的最后一毫秒:
console.log(lastday)
var diff = lastday - time; //毫秒数
return Math.floor(diff / (1000 * 60 * 60 * 24));
}
restOfYear(new Data())
//先取下一年第一秒,再减1毫秒。顺便思考一下为什么

js 时间常用处理方法的更多相关文章

  1. JS 数组常用的方法

    数组常用的方法: x.toString()方法:任何对象都有toString方法.        将任何对象转为字符串. 一般不主动调用,系统在需要时自动调用 x.valueOf()方法:同toStr ...

  2. js中常用数组方法concat join push pop slice splice shift

    javascript给我们很多常用的 数组方法,极大方便了我们做程序.下面我们来介绍下常用的集中数组方法. 比如 concat() join() push() pop() unshift() shif ...

  3. js字符串常用判断方法

    转自:http://blog.sina.com.cn/s/blog_6819fa800100j5t6.html 一.方法介绍 function obj$(id)                     ...

  4. js 中常用的方法

    1..call() 将.call()点之前的属性或方法,继承给括号中的对象. 2.(function(){xxx})() 解释:包围函数(function(){})的第一对括号向脚本返回未命名的函数, ...

  5. js中常用的方法(数组篇)

    1.replace(),根据释义,即为代替,用法为: stringObject.replace(regexp/substr,replacement)括号内前者是待匹配字符串,并用后者代替这个字符串.例 ...

  6. js组件常用封装方法。。。。。【组件封装】 ★★★★★★

    公共弹窗js写法:mcake弹窗封装Dialog.js function Dialog(bg,els,opts) { this.$els = $(els); this.$Dialogbg = $(bg ...

  7. js字符串常用的方法总结,及其用法

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  8. js数组常用添加方法有两种

        //头部     //this.list.unshift({name:this.itemName,date:new Date()});     //尾部         this.list.p ...

  9. js与jquery常用数组方法总结

    昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害 ...

随机推荐

  1. 投稿SCI杂志 | 如何撰写cover letter | 如何绘制illustrated abstract

    现在大部分学术期刊杂志都要求提供这两样东西. 一个是面向editor的文章和研究的高度总结:一个是面向读者的高度总结,一图胜千言. 如何制作动画摘要呢? 收集素材,大部分内容在PPT里就能完成. 如何 ...

  2. springboot装配OkHttp组件

    在SpringBoot应用中,发送Http通常我们使用RestTemplate,但有部分组件底层是使用OkHttp进行Http的操作,而且OKHttp也是一个很优秀的HTTP组件. RestTempa ...

  3. ROC曲线 VS PR曲线

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  4. 支付宝小程序开发——如何获取支付宝小程序页面的https链接

    前边介绍过通过配置支付宝Scheme协议alipays://来实现h5到小程序的跳转,其实还可以获取小程序页面的https格式链接,虽然支付宝官方并没有直接提供方案,但是通过小程序后台的“码管理”给页 ...

  5. Java学习-058-Jsoup爬虫获取中国所有的三级行政区划数据(三),处理二级编码缺失

    通过查看数据可知,直辖市或者某些三级行政区域没有对应的二级区域,为方便后续的地址使用,可自定义缺失的二级地址. 如下示例自定义的二级行政区域的名称为一级区域的名称,对应的源码如下所示: 将此段源码添加 ...

  6. 使用bugly热更新时自定义升级弹窗的UI样式

    项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗. 不过UI小姐姐说弹窗太丑了,要自定义. bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/us ...

  7. 浅入深出ETCD之【简介与命令行使用】

    前言 你知道etcd吗?随着k8s的使用广泛之后,etcd被非常多的人所知道,同时又因为它可靠的分布式特性被很多人喜欢.所以,我准备有几篇博文来记录一下,从基本使用到线上部署再到原理分析,做一个系列. ...

  8. Struts2访问Servlet

    知识点: servlet是单例的,Action是多例的,一次请求,创建一个Action的实例 结果页面分为全局和局部两类(局部优先级更高) result标签:name : 默认succestype : ...

  9. C++排序算法比较

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序.          ...

  10. Selenium-PO设计模式

    先来一张图,看看整个Po架构的实现: operatePages:操作页面,也就是把每一个操作页面,写成一个类. pages:用来存放公共配置文件的一个目录.比如基础类,后续所有类都会用到基础类. re ...