【问题标题】:angular-bootstrap date picker shows incorrect date for 'yyyy-mm-dd' format [duplicate]angular-bootstrap 日期选择器显示“yyyy-mm-dd”格式的日期不正确[重复]
【发布时间】:2016-02-25 18:22:27
【问题描述】:

我们以yyyy-mm-dd 的格式存储出生日期。当将此格式提供给angular-bootstrap 日期选择器时,它会在弹出窗口中选择不正确的日期。将其转换为日期对象会导致显示和选择都不正确。 See my plnk 示例(忽略验证内容,这完全是另一个问题)。

// Displays '2015-09-25', but 24th is selected
var date = '2015-09-25';

// Displays '2015-09-24', selects 24th
var date = new Date("2015-09-25");

【问题讨论】:

  • 问题在于时区。模型使用 UTC 时区 - 但所选日期使用当地时区。

标签: javascript angularjs date datepicker angular-bootstrap


【解决方案1】:

来自javascript Date timezone issue:“在 JavaScript 中,格式为 YYYY-MM-DD 的值被解释为 UTC 值,而不是本地时间值。”

一种解决方法是用斜杠替换连字符:

var s = "2015-09-25";
var dt = new Date(s.replace(/-/g, '/'));

我建议使用moment.js。它对我有用,我在使用 javascript datepicker 时遇到了同样的问题。

var s = "2015-09-25";
var dt = moment(s, 'YYYY-MM-DD').toDate();

【讨论】:

  • 最好将问题标记为重复问题,而不是链接到其他答案
  • +1 使用 Moment.js 解析日期。执行此操作时,请确保传递特定格式字符串:moment(str, fmt)。这是关键。来自docs:“警告:浏览器对解析字符串的支持不一致。因为没有规范应该支持哪些格式,所以在某些浏览器中有效的方法在其他浏览器中无效。/为了获得一致的结果,解析除 ISO 之外的任何内容8601个字符串,你应该使用String + Format。”
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
  • 2021-07-14
  • 2018-08-10
  • 2016-01-02
相关资源
最近更新 更多