js中Date的构造函数解读

更新日期: 2019-08-19阅读: 2k标签: 日期

javascript中的内置对象是我们经常会用到的,那么今天我们就来说说Date的四种构造方法吧


一、new Date()

这是我们最常使用也最熟悉不过的Date对象的构造方法了,通过无参数的构造函数我们可以默认获取到一个代表实例化时的Date对象

var now = new Date();
console.log(now) //Thu Sep 19 2019 16:13:08 GMT+0800 (中国标准时间)


二、new Date(value)

这个构造方法的参数是一个Number型,表示自1970年1月1日00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒。这个方法中可以用整型,也可以用浮点型,不过浮点型后面的小数点后的尾数一般会被忽略就是了。虽然在node环境(v10.15.3)下参数的确是从00:00:00时分开始计数,但是,通过实测发现在部分浏览器环境(在Edge,Chrome下如此)下参数是却从08:00:00开始计数,如下代码所示:

//浏览器
var time1 = new Date(1000);
var time2 = new Date(2000.2);
var time3 = new Date(2000.8);
console.log(time1); //Thu Jan 01 1970 08:00:01 GMT+0800 (中国标准时间)
console.log(time2); //Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)
console.log(time3.getMilliseconds()); //0

//node
var time4 = new Date(1000);
console.log(time4); //1970-01-01T00:00:00.001Z

原因分析:node中是严格遵守UTC时间标准的,所以是严格的1970年1月1日00:00:00 UTC(the Unix epoch);而在浏览器中一般是以本地时间为准,例如:在中国是以北京时间为基准的,而北京在东八区,所以会比标准的格林尼治时间要多8个小时,将电脑时区设置成太平洋时区后测试

//改成太平洋时间后
var time5 = new Date(1000);
console.log(time5); //Wed Dec 31 1969 16:00:01 GMT-0800 (Pacific Standard Time)

看到太平洋时间发现时间被“减了”,就会想到参数为负数的时候,是不是也会从这个基准时间开始减,如下:

//北京时间下
var time6 = new Date(-1000);
console.log(time6); //Thu Jan 01 1970 07:59:59 GMT+0800 (China Standard Time)

 

三、new Date(dateString)

这个构造函数应该是最有用和最会出现一些问题的了。参数dateString,顾名思义,是一个String型的格式化date字符串。该字符串应该能被Date.parse()方法正确识别,即符合IETF-compliant RFC 2822 timestamps或version of IOS8601。那这个构造函数到底能解析哪些格式化字符串?又不能解析哪些字符串呢?

注:因为该构造函数在不同浏览器以及不同node版本之间有差异,故不推荐大家使用,同理也不推荐使用Date.parse,大家可以使用自己定义的工具函数把字符串转成date哦!

var time1 = new Date('2019/9/9');
var time2 = new Date('2019/09/09');
var time3 = new Date('2019-9-9');
var time4 = new Date('2019-09-09');
var time5 = new Date('2019 9 9');
var time6 = new Date('2019/9/9 12:20:05');
var time7 = new Date('2019-9-9 12:70:100');
var time8 = new Date('2019 9 9 14 0 1');
var time9 = new Date('2019/09/09 -12:20:13');
var time10 =new Date("February 3,2009 12:30:15");
console.log(time1); //Mon Sep 09 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time2); //Mon Sep 09 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time3); //Mon Sep 09 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time4); //Mon Sep 09 2019 08:00:00 GMT+0800 (中国标准时间)
console.log(time5); //Mon Sep 09 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time6); //Mon Sep 09 2019 12:20:05 GMT+0800 (中国标准时间)
console.log(time7); //Invalid Date
console.log(time8); //Invalid Date
console.log(time9); //Invalid Date
console.log(time10); Tue Feb 03 2009 12:30:15 GMT+0800 (中国标准时间)

一般情况下,建议使用yyyy/MM/dd hh:mm:ss格式,其他格式可能会出现意想不到的错误


四、new Date(year,monthIndex[,day[,hours[,minutes[,seconds[,milliseconds]]]]]

这个构造通过多个函数,指定年月日时分秒来构造日期对象。此方法参数至少为两个,表示年月,可选参数5个,因为参数只有1个的话,是number型会使用第二种构造方法,是string型会使用第三种构造方法。此方法的参数类型可以是整数,浮点数(浮点会被转化为整型),或是字符串(字符串会被转化为Number型),也可以是正数、负数(但是,注意不能超过日期所能表示的最大范围 -100,000,000 天至 100,000,000 天)。当参数只有2个的时候,除了day默认为1,其余参数默认为0(此时不受时区的影响)。另外,参数2的月份需要加1,因为它对应的是0-11(同getMonth()和setMonth())

var time1 = new Date(2019,2);
var time2 = new Date(2019.3,'5');
var time3 = new Date(2019,4,-3);
var time4 = new Date(2019,5,10,13,70,100,50);
console.log(time1); //Fri Mar 01 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time2); //Sat Jun 01 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time3); //Sat Apr 27 2019 00:00:00 GMT+0800 (中国标准时间)
console.log(time4); //Mon Jun 10 2019 14:11:40 GMT+0800 (中国标准时间)

同之前的原因,在node环境下,时间会出现偏移,在原有”标准时间“下要减去时区的时间差,例如,北京时间为东八区,在浏览器中基本保持与传参一致,但是在node环境下会”减去”这八小时的时间差,相反,西八区会加上这八小时的时间差。


最后,再说一点,就是Date对象作为参数构造Date在某些情况下也是可以的,这个时候,参数先被解析成字符串,然后通过第二种构造方法执行


链接: https://www.fly63.com/article/detial/5407

解决javaScript在不同时区new Date()显示值不同问题

在日期格式化时遇到的问题,日期格式化方法在最下面。如果在中国时区 formatDate(‘2019-07-09‘) 结果是 ‘2019-07-09’,如果 在夏威夷时区 utc-10:00 或者别的时区 formatDate(‘2019-07-09‘) 结果是 ‘2019-07-08’

JS获取当前月的最后一天

为了更好的讲这节的内容,提示一个 JS 处理日期的小技巧,想获取上个月最后一天,只需要设置SetDate参数为0即可。使用 JS 获取当前月的最后一天,咱们通常的思路先获取下个月的第一天

Js如何获取某一天所在的星期?

我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。

vue 循环取值日期格式化,字符串截取处理

用vue取值页面遍历时,每次都搜索js日期格式化和字符串长度截取,这次记录下来,以后从这里直接拿即可。html代码如下

js如何获取某一天所在的星期?

我们这里来获取今天所在星期的始末日期,我们可以通过(new Date).getDay()来获取今天是星期几,然后再通过这个减去或者加上一定的天数,就是这个星期的开始日期和结束日期。

ElementUI日期选择器时间选择范围限制

ElementUI是饿了么推出的一套基于vue2.x的一个ui框架。官方文档也很详细,这里做一个element-ui日期插件的补充。官方文档中使用picker-options属性来限制可选择的日期,这里举例子稍做补充。

js获取一段时间内的间隔日期

js获取指定时间范围内指定间隔天数的所有日期,前端js,已知开始时间a、结束时间b和间隔天数c,要求取在a-b这两个时间范围内、间隔c天的所有日期。

前端的各种日期操作

虽然现在处理日期方面已经有了很成熟的也很好用的库,例如(momentjs和date-fns),但是在实际开发中,我们有时候可能并不需要整个库。所以我就在下面整理了在前端开发时对日期时间的各种操作,也算是比较全的了

Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题

今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下:在Chrome下会输出 pass,在Safari会输出 isNaN,根据 ECMAScript 5 ISO-8601 format support: 的说法

JavaScript将毫秒转换为日期格式?

给定一串毫秒数,如何使用JavaScript将它们转换为日期格式?下面本篇文章就来给大家介绍一下使用JavaScript将毫秒转换为日期格式的方法,希望对大家有所帮助。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!