Javascript UTC转换日期

时间:2017-08-16 17:20:07

标签: javascript date datetime

我有一个函数,我传递一个日期字符串,我需要根据当前的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();
}

小提琴:http://jsfiddle.net/981ats14/

3 个答案:

答案 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()

进行比较

&#13;
&#13;
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;
&#13;
&#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()
}