我有一个日期字符串,看起来像这样“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)
如何使用时刻正确获取当地时间?
我有一个日期字符串,看起来像这样“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)
如何使用时刻正确获取当地时间?
您显示一个Date
对象,然后它的表示取决于浏览器。你正在做的是:
Date
对象moment()
Date
用格式化format()
,现在你有了你想要的字符串。Date
;Date.toString()
使用默认浏览器相关实现将该日期转换回字符串。这个字符串是你所拥有的,也是你需要的:
moment(day + " " + start).format('YYYY-MM-DD h:m')
不要将其解析回Date
对象(它甚至可能会失败,您正在使用带dateString
参数的构造函数:请参阅MDN),Date.toString()
将始终生成浏览器首选的格式。
我认为您正在寻找的是:
moment(day + " " + start, 'YYYY-MM-DD H:mm').toDate()
如果您需要指定输入格式,则将其作为时刻构造函数的参数。如果使用format
方法,那就是创建字符串的输出格式。
但阿德里亚诺也提出了一些非常好的观点。Date
除非将对象传递给需要它的其他代码或控件,否则不应使用对象。最终用户总是需要一个字符串来显示。
至于为什么您的代码没有正确获取时间,请考虑当您使用它时h:m
会格式化为9:0
. 一些浏览器可能不将其理解为有效时间。你应该H:mm
得到9:00
. (Date
构造函数的解析是特定于实现的。)我还使用了H
24 小时制的大写字母。如果您想坚持使用 12 小时制,那么您还应该在格式中包含一个 am/pm 指示符h:mm a
。