【问题标题】:Angular Material Datepicker Timezone ignore?Angular Material Datepicker时区忽略?
【发布时间】:2017-09-06 11:02:17
【问题描述】:

我正在尝试从用户那里获取航班日期,而 datepicker 总是将日期设置为带有用户时区的 datetime 对象,从而导致发送到服务器的日期错误。 尝试使用ng-model-options="{ timezone: 'utc' }"

但随后用户在选择日期后看到错误的日期(日期显示为用户选择的前一天)。

如何告诉 datepicker 完全忽略时区 - 如果不可能,我可以在 FE / BE 上做些什么来将此日期转换为非时区日期?

我知道我可以在 FE 上将其转换为 Posix,但一旦我这样做,日期选择器就会尖叫它需要日期对象。

提前谢谢...

【问题讨论】:

  • 看看这个库:momentjs.com 它用于管理 JS 中的日期(您可以在 FE 和 BE 中使用节点),请参阅 api 文档,您可以转换时区和任何您想要的想要,希望对你有帮助

标签: angularjs datepicker timezone angular-material


【解决方案1】:

我遇到了完全相同的问题,我使用此代码结束了我们

Date.prototype.toJSON = function () {
   var timezoneOffsetInHours = -(this.getTimezoneOffset() / 60); //UTC minus local time
   var sign = timezoneOffsetInHours >= 0 ? '+' : '-';
   var leadingZero = (timezoneOffsetInHours < 10) ? '0' : '';

   //It's a bit unfortunate that we need to construct a new Date instance 
   //(we don't want _this_ Date instance to be modified)
   var correctedDate = new Date(this.getFullYear(), this.getMonth(), 
   this.getDate(), this.getHours(), this.getMinutes(), this.getSeconds(), 
   this.getMilliseconds());
   correctedDate.setHours(this.getHours() + timezoneOffsetInHours);
   var iso = correctedDate.toISOString().replace('Z', '');

   return iso + sign + leadingZero + Math.abs(timezoneOffsetInHours).toString() + ':00';
}

它来自另一个 SO 问题How to JSON stringify a javascript Date and preserve timezone

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多