我正在将第三方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之外)的日期为格林尼治标准时间,因此我也需要使用该日期。
答案 0 :(得分:1)
由于您的日期选择器正在根据本地时间生成Date
对象,但是您实际上希望它们以UTC的形式出现,因此您可以执行以下操作:
var timestamp = moment(dayElem.dateObj).utc(true).valueOf();
将true
传递给utc
函数将告诉它保留日期和时间值并偏移偏移量,但要权衡选择不同的时间点。就您而言,这似乎就是您所需要的。
答案 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());