我有一个函数,我传递一个日期字符串,我需要根据当前的UTC日期确定提供的日期是否过去。
我认为我的问题来自dateToUTC
函数,因为它在UTC时间返回日期,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();
}
答案 0 :(得分:1)
我不确定你要做什么。如果你想要&#34; 08/16/2017&#34; (我假设是2017年8月16日)要解析为UTC,然后查看它是否在当前日期之前,那么你可以使用一个简单的解析函数。
当前&#34; UTC日期&#34;由new Date()
提供,因为Date对象是UTC。主机时区设置用于计算当前UTC时间,通常由 toString 和 toLocaleString 方法返回主机时区中的日期和时间。但Date对象的基础值是UTC。
所以你可以解析&#34; 08/16/2017&#34;作为UTC,只需将其与 new 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()));
&#13;
字符串&#34; 2017-08-16&#34;应该由内置的解析器解析为UTC,但是字符串解析是众所周知的不可靠所以总是手动解析字符串。库可以提供帮助,但通常只需要一个简单的功能。
答案 1 :(得分:0)
您错误地创建了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
答案 2 :(得分:0)
正如您所猜测的那样,currentUTC正在返回当前的日期时间,而不仅仅是日期。您可以像这样修改它以获得当天的开头:
function currentUTC() {
const d = new Date();
d.setHours( 0, 0, 0, 0 );
return d.getTime()
}