使用moment.js和moment-timezone.js在JavaScript中的日期和时间

时间:2016-08-28 18:34:34

标签: javascript momentjs

我需要在输入字段中显示date and time。在一天开始的第一个datetime value,在一天结束的第二个datetime value。我使用moment.jsmoment-timezone.js

问题

00:00:0002:59:59每天代码显示意外结果。 代码显示前一天而不是当天。 这是jsFiddle example

要查看我的意思,请打开浏览器控制台并将时间设置为从00:00:0002:59:59和区域到Europe/Riga的所有内容。

此问题显示在Windows 10 Pro和当前的Chrome,Firefox和Opera上。

代码

$(function() {
    var myTime = moment(new Date()).utc().toDate();
    myTime = moment(myTime).tz("Europe/Riga").format();
    console.log('myTime = '+ myTime);

    var startOfDay = moment().utc().startOf('day').subtract(3, 'h').toDate();
    var endOfDay = moment().utc().endOf('day').subtract(3, 'h').toDate();
    console.log('startOfDay = '+ startOfDay);
    console.log('endOfDay   = '+ endOfDay);
    startOfDay = moment(startOfDay).tz("Europe/Riga").format();
    endOfDay = moment(endOfDay).tz("Europe/Riga").format();
    console.log('startOfDay = '+ startOfDay);
    console.log('endOfDay   = '+ endOfDay);
    document.getElementById('date_from').value = startOfDay;
    document.getElementById('date_to').value = endOfDay;
});

控制台输出

{--- console output start --------------------------------}
myTime = 2016-08-29T01:56:37+03:00
startOfDay = Sun Aug 28 2016 00:00:00 GMT+0300 (FLE Daylight Time)
endOfDay   = Sun Aug 28 2016 23:59:59 GMT+0300 (FLE Daylight Time)
startOfDay = 2016-08-28T00:00:00+03:00
endOfDay   = 2016-08-28T23:59:59+03:00
{--- console output end --------------------------------}

正如可以看到myTime设置为8月29日,但startOfDayendOfDay仍然会返回8月28日。

  • 我做错了吗?
  • 我在这里错过了什么吗?
  • 或者它是一个错误?

更新

没有utc()subtract(3, 'h')

的工作代码
$(function() {
    var myTime = moment().toDate();
    myTime = moment(myTime).tz("Europe/Riga").format();
    console.log('myTime = '+ myTime);

    var startOfDay = moment().startOf('day').toDate();
    var endOfDay = moment().endOf('day').toDate();
    console.log('startOfDay = '+ startOfDay);
    console.log('endOfDay   = '+ endOfDay);
    startOfDay = moment(startOfDay).tz("Europe/Riga").format();
    endOfDay = moment(endOfDay).tz("Europe/Riga").format();
    console.log('startOfDay = '+ startOfDay);
    console.log('endOfDay   = '+ endOfDay);
    document.getElementById('date_from').value = startOfDay;
    document.getElementById('date_to').value = endOfDay;
});

请告知。

感谢您的时间和知识。

0 个答案:

没有答案