格式化momentjs日期时间

时间:2015-03-29 23:48:50

标签: javascript angularjs momentjs

大家好,我已经看了几个问题,但尚未找到问题的可靠答案。我已经看过的问题包括:

我的问题如下:

我有一个基本时间选择器,时间范围从凌晨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

2 个答案:

答案 0 :(得分:1)

您可以使用:

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

答案 1 :(得分:0)

你应该specify a format string when parsing

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

来自moment.js docs

  

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

     

为了解析除ISO 8601字符串以外的任何其他内容的一致结果,您应该使用String + Format。

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

  

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

此外,您可能不需要为此目的传递时区。但是,如果你需要它是特定于时区的,那将是错误的方法。 moment函数不接受时区参数。您需要使用moment-timezone插件,并将其传递给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"));