簡體   English   中英

Angular UI datepicker 日期錯誤

[英]Angular UI datepicker is getting wrong date

我正在用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 的地區,但我不知道為什么會發生這種情況以及如何解決它。 有任何想法嗎?

你可以參考這個線程 - GitHub

嘗試更改您的機器時區,因為 Date obj 默認選擇您機器的本地時間。

或者嘗試通過 getTime() 將 Date 對象解析為毫秒,如果它的價值並添加 10800000 ms,即 3 小時到日期模型。

因此,您的新日期模型將是您選擇的(以毫秒為單位)+ 10800000 = 所需的 UTC 日期。

這實際上解決了我的問題,這是我的代碼:

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

如果您只使用日期(不關心時間),您可能希望盡早將其轉換為當地午夜。 需要構造函數是使用類而不是模型接口的一個很好的理由,恕我直言。 然后你就可以在一個地方擺脫這種混亂,而不是用轉換來亂扔你的代碼。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM