【问题标题】:Formatting dates with moment JS to match用时刻 JS 格式化日期以匹配
【发布时间】:2019-10-02 20:52:53
【问题描述】:

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

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

1559260800000

这相当于
格林威治标准时间: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

这相当于:
格林威治标准时间: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 月,当我们不在英国夏令时时,日期是格林威治标准时间,所以我也需要这个工作。

【问题讨论】:

  • 你能澄清一下这个问题吗?你说你理解它与当地时区有关,那么你在寻找什么样的解决方案?例如你现在没有得到什么之后你需要的行为是什么?
  • 两个epoch字符串需要匹配。也许我从日历中获取日期并忽略时间,将时区设置为 00:00:00 的 gmt 然后生成它。但最终的目标是获得两个匹配的时期。所以第一个是正确的
  • 您的意思是您需要将所选日期格式化为第三方 API 时区中的纪元值吗?

标签: javascript datetime momentjs date-formatting flatpickr


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢@Matt,以后我会用 Epoch 措辞轻松一些;)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多