2016-08-04 29 views
4

我想將所選日期保持爲UTC格式。彈出日曆顯示當地日期,但所選日期爲UTC

但彈出的日曆與選定的日期時間不同步。

讓當我點擊8月13日說,與選定的日期爲08/12/2011

因爲在我的時區是8月13日,但它仍然是在08/12與UTC時區

inline inline

HTML
<div class="col-sm-10" ng-click="open($event)"> 
    <input type="text" class="form-control ng-pristine ng-untouched ng-valid ng-isolate-scope ng-valid-date ng-valid-required" datepicker-popup="yyyy/MM/dd" is-open="opened" datepicker-options="dateOptions" ng-required="true" close-text="Close" required="required" aria-required="false" aria-invalid="false" ng-model="form.start_date" /> 
    </div> 

JS控制器

app.controller('FlightSkuStartDatepickerCtrl', ['$scope', 
     function($scope) { 
      // Disable weekend selection 
      $scope.disabled = function(date, mode) { 
       return (mode === 'day' && (date.getDay() === 0 || date.getDay() === 6)); 
      }; 

      $scope.toggleMin = function() { 
       $scope.minDate = $scope.minDate ? null : new Date(); 
      }; 
      $scope.toggleMin(); 

      $scope.open = function($event) { 
       $event.preventDefault(); 
       $event.stopPropagation(); 

       $scope.opened = true; 
      }; 

      $scope.dateOptions = { 
       formatYear: 'yy', 
       startingDay: 1, 
       class: 'datepicker' 
      }; 
      $scope.formats = ['YYYY/MM/DD']; 
      $scope.format = $scope.formats[0]; 
     } 
    ]);  
+0

您正在試圖存儲您選擇的時間爲UTC? –

+0

首先,您應該確定timepicker的時區,然後您可以使用時刻或其他東西將其存儲爲UTC。但要回答您的問題,您應該提供有關您的問題的明確信息。 –

+0

@FatihAktepe是的,無論用戶點擊什麼,我都會節省UTC時間。我知道這是不正常的。但這只是我的用例。謝謝。 – user3675188

回答

4

如果您將其存儲爲UTC,那麼您爲什麼將UTC保存爲問題?如果你想把你的時間從UTC改變到另一個時區,你可以使用角度角度。但是你必須給出轉換時間的時刻。例如:

function utctoTimeZoneFormat(date, current_tz) { 

      var offset = moment(date).tz(current_tz).utcOffset(); 
      var returnObj = { 
       "day": "", 
       "time": "" 
      } 
      returnObj.day = moment.utc(date).tz(current_tz).utcOffset(offset).format('dddd'); 
      returnObj.time = moment.utc(date).tz(current_tz).utcOffset(offset).format('HH:mm:ss') 

      return returnObj; 
     } 

您可以通過日期參數從UI和current_tz爲你的時區選定日期。但是你必須像「時代的標題」那樣通過它,如「America/Los_Angeles」。

function timeZoneToUTCFormat(date, current_tz) { 

      var offset = moment(date).tz(current_tz).utcOffset(); 
      offset = offset * -1; 
      var returnObj = { 
       "day": "", 
       "time": "" 
      } 
      returnObj.day = moment.utc(date).tz(current_tz).utcOffset(offset).format('dddd'); 
      returnObj.time = moment.utc(date).tz(current_tz).utcOffset(offset).format('HH:mm:ss') 

      return returnObj; 
     } 

第二個函數使您可以將選定的日期存儲爲UTC。你應該相應地傳遞參數。例如;如果你在「America/Los_Angeles」中,你應該將你的時區作爲給定的字符串傳遞,並將其轉換爲UTC。所以你可以通過使用上面寫的兩個函數來同步你的UI和後端。

+0

彈出日曆顯示用戶的時區不是utc。例如,如果我在OS上將我的時區從-8更改爲+8,則彈出時區將完全不同。比方說,如果我的區域在+8,當我點擊2016-08-10在選定日期的彈出窗口可能是2016-08-09。如果彈出窗口顯示用戶時區,則我想將其同步 – user3675188

+0

,那麼您可以將選定的日期存儲爲UTC。要更新我的答案。 –

+0

如果答案解決了您的問題,請給我一個反饋。 –

0

在UI的日期選擇器的新版本有解決這個

ng-modal-options='{"timezone":"utc"}' 

這個從日期

刪除時區組件在舊版本

的解決方案是一個簡單的方法刪除日期部分的時區組件(更好地具有可重用性的指令...

myapp.directive("dateToIso", function() { 
    var linkFunction = function (scope, element, attrs, ngModelCtrl) { 

     ngModelCtrl.$parsers.push(function (datepickerValue) { 
      return moment(datepickerValue).format("YYYY-MM-DD"); 
     }); 
    }; 

    return { 
     restrict: "A", 
     require: "ngModel", 
     link: linkFunction 
    }; 
}); 

您可以使用它像下面

<input ng-model='abc' date-to-iso ui-datepicker> 
相關問題