使用 moment JS 格式化日期以匹配

Formatting dates with moment JS to match

我正在使用第三方 API 和 Moment JS 在 Javascript 中进行一些日期格式化。

第三方 API 将一些 data/results 与 epoch 日期(以毫秒为单位)分组,例如:

1559260800000

这相当于:
格林威治标准时间:2019 年 5 月 31 日,星期五 00:00:00
您所在的时区:2019 年 5 月 31 日,星期五 01:00:00 GMT+01:00 DST
相对:15 天后

我们使用 Flatpickr 日历来选择日期。选择日期后,它 returns 所选日期采用本地日期格式,例如:

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

如果我使用 moment 进行转换,我会得到以下结果:

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

这相当于:
格林威治标准时间:2019 年 5 月 30 日,星期四 23:00:00
您所在的时区:2019 年 5 月 31 日,星期五 00:00:00 GMT+01:00 DST
相对:15 天后

我知道这个问题与当地时区有关,第一个是 GMT 00:00:00,第二个是 GMT 00:01:00,但我不确定如何解决它。

此外,今年晚些时候的日期,例如 12 月,当我们不在英国夏令时时,日期是格林威治标准时间,所以我也需要这个才能工作。

听起来您希望将日期选择器中的日期转换为表示所选日期 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()); 

由于您的日期选择器根据本地时间生成 Date 对象,但您实际上希望它们使用 UTC,那么您可以执行以下操作:

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

true 传递给 utc 函数将告诉它保留日期和时间值并移动偏移量,trade-off 会及时选择不同的时刻。就您而言,这似乎正是您所需要的。

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