js中Date的构造函数解读
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()); // //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在某些情况下也是可以的,这个时候,参数先被解析成字符串,然后通过第二种构造方法执行
js中Date的构造函数解读的更多相关文章
- js实现小时钟,js中Date对象的使用?
介绍一下js中Date对象的使用 dateObj = new Date() dateObj = new Date(dateValue) dateObj = new Date(year,month,da ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- js中Date()对象详解
var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-???? ...
- js中date类型的格式转化为yyyy-MM-dd HH:mm:ss的String类型
在vue中或其他框架中可以在Date的原型链中添加Format的方法,如ruoyi可以写在main.js中更好,如果写在utils还需要去导入包. 正常的js直接放到utils.js就好 Date.p ...
- JS中Date对象getYear()方法和getFullYear()方法区别
释义 JavaScript getFullYear() 方法 getFullYear() 方法可返回一个表示年份的 4 位数字. getYear() 语法 dateObject.getFullYear ...
- js中Date 方法
Date (对象) Date 对象能够使你获得相对于国际标准时间(格林威治标准时间,现在被称为 UTC-Universal Coordinated Time)或者是 Flash 播放器正运行的操作系统 ...
- JS中date日期初始化的5种方法
创建一个日期对象: 代码如下: var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yyyy hh ...
- JS中Date.parse()和Date.UTC()返回值不一致
Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包 ...
- JS中使用组合构造函数模式和原型模式
创建自定义类型的最常见方式,就是组合使用构造函数模式与原型模式.构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性. 结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的 ...
随机推荐
- Promise.race 的原理
// race的原理 Promise.race = function(values){ return new Promise((resolve,reject)=>{ for(let i = 0 ...
- nginx主配置文件学习,以及nginx的反向代理和负载均衡
1.nginx.conf主配置文件学习 worker_processes : 表示nginx的进程数,根据CPU的核数来定义,起到优化的作用.通过cat /proc/cpuinfo来查看核数 even ...
- hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)
题目链接 裸的结论题.百度 Ramsey定理.刚学过之后以为在哪也不会用到23333333333,没想到今天网络赛居然出了.顺利在题面更改前A掉~~~(我觉得要不是我开机慢+编译慢+中间暂时死机,我还 ...
- 【leetcode】870. Advantage Shuffle
题目如下: 解题思路:几千年前,一个古人曾经解过这个题目,他的名字叫做田忌,后人称他的解题思想叫做“田忌赛马”.言归正传,本题就是一个田忌赛马的问题,先将A与B进行排序,然后判断A[0]与B[0]的大 ...
- Task1.PyTorch的基本概念
1.什么是Pytorch,为什么选择Pytroch? PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Pyth ...
- File类常用的方法与字节流类方法简介
File类常用的方法 获取功能的方法 public String getAbsolutePath() :返回此File的绝对路径名字符串. public String getPath() :将此Fil ...
- /usr,/usr/local/ 还是 /opt 目录区别
Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /us(Unix Software Resource)r:系统级的目录,可以理解为C:/Windows/, /usr/lib ...
- CF1073G Yet Another LCP Problem 后缀自动机 + 虚树 + 树形DP
题目描述 记 $lcp(i,j)$ 表示 $i$ 表示 $i$ 这个后缀和 $j$ 这个后缀的最长公共后缀长度给定一个字符串,每次询问的时候给出两个正整数集合 $A$ 和 $B$,求$\sum_{i\ ...
- [luogu]P1315 观光公交[贪心]
[luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...
- 元素隐藏visibility:hidden与元素消失display:none的区别
visibility属性用来确定元素是显示还是隐藏的,这用visibility="visible|hidden"来表示(visible表示显示,hidden表示隐藏). 当visi ...