我居住在GMT + 9,我想输入当前时区中指定的日期和时间。 Chrome版本40.0.2214.93(64位)

<input type="datetime-local" required>

但是,如果我在日期时间选择器中输入12:00 AM,

元素返回的实际值为2015-01-30T00:00(通过在Chrome控制台中打印出来),等于我所在时区的9:00 AM。我必须手动将9小时添加到结果中吗?由于Chrome浏览器不支持将datetime作为输入类型,因此我无法使用datetime作为替代类型。

最佳答案

“2015-01-30T00:00”正是您输入的内容,因此这是返回的结果。

您说“...在我所在的时区等于9:00 AM”。仅当结果使用UTC时才是正确的,而事实并非如此。根据ISO8601标准,仅当值以尾随Z结尾(例如“2015-01-30T00:00Z”)时,才假定其采用UTC。

也许您正在将值提供给Date构造函数?

new Date("2015-01-30T00:00")

在这种情况下,该值将被解释为UTC-但这是由于Date对象的古怪之处。您可以通过一些替代方法解决此问题:
new Date("2015-01-30T00:00".replace('T',' ').replace('-','/'))

或者,如果您更喜欢干净的代码,请考虑使用moment.js,它没有这个怪癖:
moment("2015-01-30T00:00").toDate();  // or .format(), or other functions...

09-17 09:24