JavaScript的UTC日期转换
我有一个函数,我传递一个日期字符串,我需要确定如果提供的日期是基于当前的UTC日期过去。JavaScript的UTC日期转换
我认为我的问题来自dateToUTC
函数,因为它返回的是UTC上午7点的日期,currentUTC
给了我全部时间戳。
这几乎就像我需要追加hh/mm/ss
到我提供的日期的结尾以检查?
有关我如何调整它的任何想法?
// I expect this to return false since the UTC DATE is not 08/17/2017
alert(isHistoricalChange('08/16/2017'))
/**
* Determine if the start date supplied is in the past
*/
function isHistoricalChange(startDate){
// dateToUTC(startDate) = 1502866800000
// currentUTC() = 1502903243386
return (dateToUTC(startDate) < currentUTC());
}
/**
* Returns the current timestamp in UTC
*/
function currentUTC() {
return Date.now();
}
/**
* Returns timestamp in UTC based on date supplied
*/
function dateToUTC(d) {
return new Date(d).getTime();
}
我不确定你想要做什么。如果您希望将“08/16/2017”(我假设它是2017年8月16日)解析为UTC,然后查看它是否在当前日期之前,那么您可以使用简单的解析函数。
由于Date对象是UTC,所以当前“UTC日期”由new Date()
提供。用于计算当前UTC时间的主机时区设置,通常由toString和toLocaleString方法返回主机时区中的日期和时间。但是Date对象中的基础值是UTC。
所以,你可以解析 “2017年8月16日” 为UTC,只是把它比作新的Date():
function parseMDYasUTC(s) {
var b = s.split(/\D/);
return new Date(Date.UTC(b[2], b[0]-1, b[1]));
}
var d = parseMDYasUTC('08/16/2017')
console.log('2017-08-16 parsed as UTC:\n' + d.toString() +
' or \n' + d.toISOString());
console.log('Is "08/16/2017" UTC before today? ' +
(parseMDYasUTC("08/16/2017") < new Date()));
字符串“2017年8月16日“应该由内置解析器解析为UTC,然而字符串解析是非常不可靠的,所以总是手动解析字符串。图书馆可以提供帮助,但一个简单的功能通常就足够了
您错误地创建一个Date对象。你应该像这样调用你的函数:alert(isHistoricalChange('2017-8-17'))
。
下面是日期构造函数的例子:
var today = new Date();
var birthday = new Date('December 17, 1995 03:24:00');
var birthday = new Date('1995-12-17T03:24:00');
var birthday = new Date(1995, 11, 17);
var birthday = new Date(1995, 11, 17, 3, 24, 0);
要了解更多: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
正如你已经猜到,currentUTC被返回当前日期时间,而不只是日期。你可以像这样修改它以获得一天的开始:
function currentUTC() {
const d = new Date();
d.setHours(0, 0, 0, 0);
return d.getTime()
}
你应该考虑使用像[Moment.js](http://momentjs.com/)这样的处理时间,所以你不必这样做。 –
@SumnerEvans - 你有没有例子说明我可以用这个库来完成这个任务? – SBB
你可以很容易地从两个“时刻”对象http://momentjs.com/docs/#/displaying/difference/中获得差异。我建议只看文档,看看它提供什么,看看它是否与你想要完成的内容相符。我个人以前没有用过,但我听说它是一个很好的图书馆。 –