[JavaScript]JavaScript获取时间戳的几种方式
JavaScript获取时间戳有多种方式。这里有一个具有纪念意义的时间:
var now = new Date('2022/02/02 22:22:22:222');
//Wed Feb 02 2022 22:22:22 GMT+0800 (中国标准时间)
我们想看看它的时间戳是不是也如此独特。下面是如何获取它的时间戳。
方法1:Date
的parse
方法
Date.parse(now);
//1643811742000
Date.parse
接受一个表示时间的字符串,所以这里的now
先转换成了字符串Wed Feb 02 2022 22:22:22 GMT+0800 (中国标准时间)
,然后再被解析成时间戳。因为每个浏览器实现它的方式不一致,所以建议不要用Date.parse
解析时间字符串。见:Date.parse() - MDN。
要注意的是,此方法返回的毫秒数都是0
.
方法2:Date实例
的getTime
方法
now.getTime();
//1643811742222
这个方法实际上跟方法1是等价的,方法1是显式调用,方法2是隐式调用,但此方法返回正常的毫秒数。
方法3:Date实例的valueOf方法
now.valueOf();
//1643811742222
这个方法返回一个Date对象的原始值。Date对象的原始值是基于Unix Time Stamp,即自1970年1月1日(UTC)起经过的毫秒数。
方法4:+
操作符获取时间戳
+now;
//1643811742222
这个方法实际上调用的是now.valueOf()
。+
运算符在这里是一元运算符,会将后面的操作数转换成数字,等于Number()
函数。数字是一种原始值。在JavaScript内部,会调用toPrimitive
把对象转换成原始值,形式如下:
toPrimitive(input,preferedType?)
preferedType
可选number
、string
。+
会将preferedType
看作是number
,将按照下面的规则转换:
- 如果input是原始值,直接返回这个值;
- 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;
- 否则,调用input.toString()。如果结果是原始值,返回结果;
- 否则,抛出错误。
+now
按照规则2调用了now.valueOf()
。
注意,Date.prototype.valueOf
重写了Object.valueOf
,所以会返回一个时间戳。
结果证明now
的时间戳并不独特:(
END