Angular UI datepicker的日期错误

时间:2016-02-26 12:17:18

标签: javascript angularjs datepicker angular-ui

我正在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的地区,但我不知道为什么会发生这种情况以及如何解决这个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您可以参考此主题 - GitHub

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

或尝试将get对象()的Date对象解析为毫秒(如果它的值),并向日期模型添加10800000 ms(即3小时)。

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

答案 1 :(得分:0)

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

    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);

答案 2 :(得分:0)

如果仅使用日期(不关心时间),则可能希望尽快将其转换为本地午夜。需要构造函数是使用类而不是模型恕我直言的接口的一个很好的理由。这样一来,您就可以将这种混乱局限在一个地方,而不必将代码浪费在转换上。

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);
    }
  }
}