格式化momentjs日期时间

Formatting momentjs date-time

本文关键字:时间 日期 momentjs 格式化      更新时间:2023-09-26

大家好,我已经看了一些SO问题,但还没有找到我的问题的确切答案。我已经看过的问题包括:

  • Moment.js返回错误日期
  • Moment JS-解析UTC并转换为本地,反之亦然

我的问题如下:

我有一个基本的时间选择器,时间从早上4:00到晚上8:00。我想使用选择的时间和硬编码的日期来格式化如下所示的内容:

"2015-05-03T04:00:00"

到目前为止,我拥有的是:

time = moment("2015/05/09 " + filterText, "America/New_York")
console.log(time.format())

其中filterText是select传入的字符串:"4:00AM"

我如何构建一个看起来像"2015-05-09T04:00:00"的东西?

到目前为止,我得到了以下内容,这还很遥远:"2015-02-27T08:20:00+00:00"

当我删除时区时,我会得到更近的东西,但时间不会改变:

time = moment("2015/05/09 " + filterText)
console.log(time.format())
"2015-05-09T08:00:00-07:00" <--- remains at 7:00 even if filterText is 8:00 or 9:00

您可以使用这个:

time = moment("2015/05/09 " + filterText);
console.log(time.format("YYYY-MM-DDTHH:mm:ss"));

解析时应该指定一个格式字符串:

time = moment("2015-05-09 " + filterText, "YYYY-MM-DD hh:mmA");
console.log(time.format("YYYY-MM-DDTHH:mm:ss"));

从此刻.js文档

警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的格式在其他浏览器中不起作用。

为了在解析ISO 8601字符串以外的任何字符串时获得一致的结果,您应该使用String+Format。

如果不传递格式字符串,可能会得到正确的结果,也可能不会。您将在控制台日志中看到以下消息:

弃用警告:即时构建回落到js日期。这是不鼓励的,并将在即将发布的主要版本中删除。请参阅https://github.com/moment/moment/issues/1407了解更多信息。

此外,您可能不需要为此通过时区。然而,如果你需要它是特定于时区的,那就错了。moment函数不需要时区参数。您需要使用即时时区插件,并将其传递给tz函数,如下所示:

time = moment.tz("2015-05-09 " + filterText, "YYYY-MM-DD hh:mmA", "America/New_York");
console.log(time.format("YYYY-MM-DDTHH:mm:ss"));