2016-03-15 95 views
4

使用ng-model-optionsdate是否可以將時區設置爲自動調整爲夏令時(即根據該值在PST和PDT之間切換)?PDT/PST中的AngularJS顯示時間

例如:

<input type="date" ng-model="order.scheduled" ng-model-options="{ timezone: 'PST' }" /> 
<input type="time" ng-model="order.scheduled" ng-model-options="{ timezone: 'PST' }" /> 

只有當時間落入標準時間(不是夏令時)的作品。

+2

對於日期和時間,我強烈建議看[MomentJS]工作(http://momentjs.com/)及其同伴[角時刻(HTTPS ://github.com/urish/angular-moment)。 MomentJS具有isDST()方法以及各種UTC和時區功能。 – Lex

+0

@Lex我可以使用MomentJS來顯示日期 - 但輸入怎麼樣? –

+0

對不起,我可能很厚,但你在問什麼?如何向用戶提供選擇日期和時間的輸入?根據您使用的UI框架,可以使用各種日期/時間選擇器控件。 – Lex

回答

0

我想你會需要moment.tz和一個輔助函數。奇怪的是,這不是內置角:

// eg. getOffset(new Date, 'America/Los_Angeles') => '-0700' 
// (date: Date, timezone: String): String 
scope.getOffset = function (date, timezone) { 
    return moment 
    .tz(date, timezone) 
    .format('Z') 
    .replace(':', '') 
} 

... 
<input 
    type="time" 
    ng-model="order.scheduled" 
    ng-model-options="{ 
    timezone: getOffset(order.scheduled, 'America/Los_Angeles') 
    }" 
/> 
+0

不幸的是,AngularJS不會動態地重載ng-model-options。 –

+0

[你是對的](https://github.com/angular/angular.js/blob/master/src/ng/directive/ngModel.js#L1303) - 無賴。看起來你需要在每次更改日期或時區時重新呈現輸入,或將時區感知移至應用層(而不是使輸入[時間]指令可識別時區)。後者似乎是一種不那麼幹涉的做法。 – bcherny