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