【问题标题】:HTML Input type datetime-local setting the wrong time-zoneHTML 输入类型 datetime-local 设置错误的时区
【发布时间】:2014-09-02 10:21:08
【问题描述】:

我创建了一个应用程序,它接受 HTML 输入并通过 JavaScript 在本机日历事件上创建一个事件。它需要来自<input type="datetime-local"> 的时间,并且因为它选择了不同的时区,所以它输入了不同的时间。如果我输入 1 o'clock PM 作为时间,它将返回 8 o'clock AM。

<input type="datetime-local" id="startDate" name="startDate">

还有 JavaScript:

var startDate = new Date($("#startDate").val());

任何帮助都会很棒。如果需要,我可以发布更多代码。

【问题讨论】:

  • 发布完整的代码并做一个jsfiddle.net
  • @redditor - 问题很清楚。小提琴会很有用,但not every JavaScript question needs a fiddle.
  • @MattJohnson 够公平的。 认为这是必要的,这就是要求它的原因。这个问题很清楚,你两次编辑了这个问题/s
  • @redditor - 是的,我实际上编辑了 3 次。这是因为 StackOverflow 的使命是创建对其他人有用的问题和答案。鼓励重新格式化、修复拼写和标签以及删除不相关的元素。我没有改变问题的意图,也没有在问题中添加任何符合条件的材料。无论如何 - 要求一个小提琴是好的。我不是想责骂——只是告诉你。谢谢。
  • @MattJohnson 我省略了第三个,因为它只是一个标记问题。别担心,伙计,我以后会在我的 jsfiddle 触发器上保持安全锁 :)

标签: javascript html datetime timezone


【解决方案1】:

HTML5 datetime-local 输入类型将返回一个 string 值,其中包含 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 有很多选项,但碰巧默认行为正是您所需要的。因此,您可以将字符串传递给 moment 构造函数而无需任何参数。

var s = $("#startDate").val();
var startDate = moment(s).toDate();

【讨论】:

  • 好的,我已经使用了 moment.js 文件,现在它让活动在“startDate”当天进行了一整天。我需要它来显示特定时间并让 endDate 关闭事件。有什么办法可以在此刻做到这一点?感谢您的帮助
  • 对不起,我没有关注你。请将此作为一个新问题提出,并提供所有支持细节。谢谢。
猜你喜欢
  • 2017-04-12
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多