用JS时刻格式化日期以匹配

时间:2019-05-15 16:34:29

标签: javascript datetime momentjs date-formatting flatpickr

我正在将第三方API与Moment JS一起用于Javascript中的某些日期格式。

第三方API以毫秒为单位epoch将某些数据/结果分组,例如:

1559260800000

这等同于
GMT:2019年5月31日,星期五00:00:00
您的时区:2019年5月31日星期五01:00:00 GMT + 01:00 DST
相对:在15天内

我们正在使用Flatpickr日历进行日期选择。选择日期后,它将以本地日期格式返回所选日期,例如:

Fri May 31 2019 00:00:00 GMT+0100 (British Summer Time)

如果我用矩来转换,则会得到以下信息:

var epoch = moment.utc(dayElem.dateObj).valueOf();
1559257200000

这等同于:
GMT:2019年5月30日星期四23:00:00
您的时区:2019年5月31日星期五00:00:00 GMT + 01:00 DST
相对:在15天内

我了解此问题与当地时区有关,第一个是格林尼治标准时间00:00:00,第二个是GMT 00:01:00,但是我不确定如何解决。

此外,一年中的较晚日期(例如12月,当我们不在BST之外)的日期为格林尼治标准时间,因此我也需要使用该日期。

2 个答案:

答案 0 :(得分:1)

由于您的日期选择器正在根据本地时间生成Date对象,但是您实际上希望它们以UTC的形式出现,因此您可以执行以下操作:

var timestamp = moment(dayElem.dateObj).utc(true).valueOf();

true传递给utc函数将告诉它保留日期和时间值并偏移偏移量,但要权衡选择不同的时间点。就您而言,这似乎就是您所需要的。

此外,Please don't call it Epoch Time。 :)

答案 1 :(得分:0)

听起来您希望将日期选择器中的日期转换为表示所选日期的UTC时区中的午夜的时间戳。

这是您想要的吗?

new Date(moment(dayElem.dateObj).toISOString(true).slice(0, 10)).valueOf()

或者,您可以使用标准的Date方法,而完全避免使用moment

var dateObj = dayElem.dateObj;
var utcMidnight = Date.UTC(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate());