我创建了一个应用程序,它接受HTML输入并通过JavaScript在本地日历事件上创建一个事件。它从<input type="datetime-local">
取时间,它输入了不同的时间因为它选择了不同的时区。如果我输入下午1点作为时间,它将返回上午8点。
<input type="datetime-local" id="startDate" name="startDate">
和JavaScript:
var startDate = new Date($("#startDate").val());
任何帮助都会很棒。我可以张贴更多的代码,如果需要的话。
HTML5 datetime-local
输入类型将返回一个字符串值,其中包含ISO8601格式的日期和时间,具有分钟精度,并且没有任何时区偏移。
例如:2014-07-12T01:00
当涉及到从字符串解析日期时,JavaScript
date对象是出了名的不一致。在大多数实现中,当您提供这样的字符串时,它会错误地假设该值是UTC格式。因此,您返回的Date
对象将根据您本地计算机的时区偏移量进行调整。
选项1
将字符串操作为可能被Date
对象的解析器解释为本地时间的格式。具体来说,将破折号(-
)替换为正斜杠(/
),并将T
替换为空格。
var s = $("#startDate").val();
var startDate = new Date(s.replace(/-/g,'/').replace('T',' '));
选项2
使用具有更强大的日期解析能力的库。有几种可用的。其中最流行的是moment.js.
Moment.js有很多选项,但它的默认行为恰好是你所需要的。因此,您可以直接将字符串传递给moment构造函数,而不需要任何参数。var s = $("#startDate").val();
var startDate = moment(s).toDate();