【问题标题】:Angular UI datepicker is getting wrong dateAngular UI datepicker 的日期错误
【发布时间】:2016-06-09 15:45:45
【问题描述】:

我正在Angular 中编写一个应用程序,并且我正在使用Angular UI 连同它。我有一个看起来像这样的日期选择器:

<input type="text" 
       ng-required="true"
       name="targetDate"
       uib-datepicker-popup="MMMM yyyy" 
       min-mode="'month'" 
       datepicker-mode="'month'"
       is-open="opened" 
       ng-click="openCalendar()"
       close-on-date-selection="true"
       show-button-bar="false" 
       min-date="today"
       ng-model="targetDate"  />

问题是,例如,当我选择 2016 年 7 月时,我的 targetDate 模型中的值是“2016-06-30T21:00:00.000Z”,正好是 2016 年 7 月之前的 3 小时。我认为这与我的本地时间和 UTC 时间有关,因为我住在一个本地时间为 +2 小时 UTC 的地区,但我不知道为什么会发生这种情况以及如何解决它。有什么想法吗?

【问题讨论】:

标签: javascript angularjs datepicker angular-ui


【解决方案1】:

你可以参考这个帖子-GitHub

尝试更改您的机器时区,因为 Date obj 默认选择您机器的本地时间。

或者尝试通过 getTime() 将 Date 对象解析为毫秒(如果值),然后将 10800000 毫秒添加到日期模型中,即 3 小时。

因此,您的新日期模型将是您选择的(以毫秒为单位)+ 10800000 = 所需的 UTC 日期。

【讨论】:

  • 你真的建议用户改变他们的本地时间只是因为应用想要在 UTC 时间显示一些东西吗?
  • 临时解决方案,将日期对象模型转换为毫秒并加上10800000(3小时)
  • 所以您的新日期模型将是您选择的(以毫秒为单位)+ 10800000 = 所需的 UTC 日期。
  • 我不推荐。只为暂时的缘故。请给我们建议一个永久的解决方案先生!
【解决方案2】:

这实际上解决了我的问题,这是我的代码:

    service.ConvertDateToJSONDate = function (dateInput) {
        if (dateInput === null || dateInput === undefined) {
            return null;
        }
        //return "\/Date(" + dateInput.getTime().toString() + ")\/";
        return "\/Date(" + (dateInput.getTime() + 10800000).toString() + ")\/";
    };

用法:service.ConvertDateToJSONDate(SelectedDateObjectToBeConverted);

【讨论】:

    【解决方案3】:

    如果您只使用日期(不关心时间),您可能希望尽早将其转换为当地午夜。需要构造函数是使用类而不是模型接口的一个很好的理由,恕我直言。然后你就可以把这些乱七八糟的东西放在一个地方,而不是在你的代码中乱扔转换。

    export class MyModel {
    
      // The runtime can still assign a string to Date, despite static type.
      date: Date;
    
      constructor(data: MyModel) {
        Object.assign(this, data);
    
        // Convert string e.g. '2008-12-25' to Date at local midnight.
        if (typeof this.date === 'string') {
          const localDate = new Date(this.date);
          this.date = new Date(localDate.getTime() + localDate.getTimezoneOffset() * 60000);
          console.log(this.date);
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2020-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      相关资源
      最近更新 更多