使用 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 会及时选择不同的时刻。就您而言,这似乎正是您所需要的。
我正在使用第三方 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 会及时选择不同的时刻。就您而言,这似乎正是您所需要的。