【发布时间】:2018-03-10 18:39:35
【问题描述】:
我有一个日期以这种格式保存在一个字符串中:2017-09-28T22:59:02.448804522Z 这个值是由后端服务提供的。
现在,在 javascript 中,我如何比较该时间戳是否大于当前时间戳?我的意思是,我需要知道那个时间是否已经发生或者还没有计算小时和分钟,而不仅仅是日期。
【问题讨论】:
标签: javascript timestamp
我有一个日期以这种格式保存在一个字符串中:2017-09-28T22:59:02.448804522Z 这个值是由后端服务提供的。
现在,在 javascript 中,我如何比较该时间戳是否大于当前时间戳?我的意思是,我需要知道那个时间是否已经发生或者还没有计算小时和分钟,而不仅仅是日期。
【问题讨论】:
标签: javascript timestamp
您可以解析它以创建Date 的实例并使用内置的比较器:
new Date('2017-09-28T22:59:02.448804522Z') > new Date()
// true
new Date('2017-09-28T22:59:02.448804522Z') < new Date()
// false
方便的是,日期已经采用Date 知道如何解析的标准格式(看起来像 ISO8601)。
【讨论】:
const anyTime = new Date("2017-09-28T22:59:02.448804522Z").getTime();
const currentTime = new Date().getTime();
if(currentTime > anyTime){
//codes
}
【讨论】:
您还可以将其转换为以毫秒为单位的 unix 时间:
console.log(new Date('2017-09-28T22:59:02.448804522Z').valueOf())
const currentTime = new Date('2017-09-28T22:59:02.448804522Z').valueOf()
const expiryTime = new Date('2017-09-29T22:59:02.448804522Z').valueOf()
if (currentTime < expiryTime) {
console.log('not expired')
}
【讨论】:
如果可以,我会使用 moment.js * https://momentjs.com/
您可以创建一个时刻,指定字符串的确切格式,例如:
var saveDate = moment("2010-01-01T05:06:07", moment.ISO_8601);
那么,如果你想知道saveDate是否是过去的:
boolean isPast = (now.diff(saveDate) > 0);
如果您不能包含外部库,则必须对年、日、月、小时等进行字符串解析 - 然后手动进行数学运算以转换为毫秒。然后使用 Date 对象,你可以得到毫秒:
var d = new Date();
var currentMilliseconds = d.getMilliseconds();
此时您可以将您的毫秒数与当前的毫秒数进行比较。如果 currenMilliseconds 更大,则 saveDate 是过去的。
【讨论】: