2

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

第三方 APIepoch以毫秒为单位对一些数据/结果进行分组,例如:

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)

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

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 天内

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

此外,一年中的晚些时候,例如 12 月,当我们在 BST 之外时,日期是格林威治标准时间,所以我也需要这个工作。

4

2 回答 2

1

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

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

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

另外,请不要称它为 Epoch Time。:)

于 2019-05-15T18:26:09.997 回答
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()); 
于 2019-05-15T18:10:15.473 回答