1

我有一个日期字符串,看起来像这样“2013-10-29”

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

如果我使用时刻来格式化这些并生成日期,由于某种原因,我会一直得到 12 作为时间

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

2013 年 10 月 29 日星期二 12:00:00 GMT-0500 (CDT)

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

4

2 回答 2

3

您显示一个Date对象,然后它的表示取决于浏览器。你正在做的是:

  1. 用;创建一个Date对象moment()
  2. Date用格式化format(),现在你有了你想要的字符串。
  3. 将其解析回Date;
  4. Date.toString()使用默认浏览器相关实现将该日期转换回字符串。

这个字符串是你所拥有的,也是你需要的:

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

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

于 2013-10-29T13:36:24.733 回答
1

认为您正在寻找的是:

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

如果您需要指定输入格式,则将其作为时刻构造函数的参数。如果使用format方法,那就是创建字符串的输出格式。

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

至于为什么您的代码没有正确获取时间,请考虑当您使用它时h:m会格式化为9:0. 一些浏览器可能不将其理解为有效时间。你应该H:mm得到9:00. (Date构造函数的解析是特定于实现的。)我还使用了H24 小时制的大写字母。如果您想坚持使用 12 小时制,那么您还应该在格式中包含一个 am/pm 指示符h:mm a

于 2013-10-30T15:55:15.337 回答