[英]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.