为什么片刻格式在不同的时区?

时间:2013-10-29 13:30:44

标签: javascript momentjs

我有一天看起来像这样的“2013-10-29”

然后我有一个时间字符串,看起来像这个“9:00”

如果我使用片刻格式化这些并生成日期,我会因某种原因继续获得12个

new Date(moment(day + " " + start).format('YYYY-MM-DD h:m'));
  

Tue Oct 29 2013 12:00:00 GMT-0500(CDT)

如何使用时刻正确获取当地时间?

2 个答案:

答案 0 :(得分:3)

您显示Date对象,然后它的表示取决于浏览器。你在做什么:

  1. 使用Date;
  2. 创建moment()对象
  3. 使用Date格式化format(),现在您有了想要的字符串。
  4. 将其解析回Date;
  5. 使用默认的Date.toString()浏览器相关实现将该日期转换回字符串。
  6. 此字符串是您拥有的以及您需要的字符串:

    moment(day + " " + start).format('YYYY-MM-DD h:m')
    

    将其解析回Date对象(它甚至可能失败,您使用带有dateString参数的构造函数:请参阅MDN) ,Date.toString()将始终生成浏览器首选的格式。

答案 1 :(得分:1)

认为你在寻找的是:

moment(day + " " + start, 'YYYY-MM-DD H:mm').toDate()

如果需要指定输入格式,则作为矩构造函数的参数。如果您使用format方法,即输出格式来创建字符串。

但阿德里亚诺也提出了一些非常好的观点。除非将其传递给需要它的其他代码或控件,否则不应使用Date对象。最终用户总是需要一个字符串进行显示。

至于为什么您的代码没有正确地占用时间,请考虑使用格式为h:m的{​​{1}}。有些浏览器可能不会将其理解为有效时间。您应9:0获取H:mm。 (9:00构造函数的解析是特定于实现的。)我还使用了大写Date 24小时制。如果您想坚持使用12小时制,那么您还应该包含格式为H的am / pm指示符。