2016-08-24 30 views
2

我在datepicker問題上遇到了致命的混亂。角度日期選擇器完全錯誤的行爲,如期望

誰能解決我的問題我可以給100分作爲回報。

當我點擊2016-08-23上的日曆時,它會顯示我2016-08-22的日期值。

此外,角度模型中的日期值也不正確。

我想使輸出可以一致。

要重現此車的問題,改變洛杉磯和東京之間

你的時區

inline

DEMO網站:https://test.jiyubi.com/tour_package/home

inline

控制器JS

app.controller('tourPackageStartDatePickerCtrl', 
    function ($scope) { 

     $scope.initStartDate = function() { 
      $scope.startDate = $scope.startDate || null; 
     }; 
     $scope.initStartDate(); 


     $scope.dateOptions = { 
      baseDate: $scope.startDate, 
      minDate: $scope.startDate || moment.utc().toDate(), 
     }; 

     $scope.openStartDateClick = function() { 
      $scope.startDatePopup.opened = true; 
     }; 


    }); 

app.controller('tourPackageEndDatePickerCtrl', 
    function ($scope, $rootScope) { 

     $scope.clear = function() { 
      $scope.endDate = null; 
     }; 

     $scope.endDateOptions = { 
      dateDisabled: disabledDays, 
      baseDate: new Date(), 
     }; 

     $scope.openEndDateClick = function() { 
      $scope.endDatePopup.opened = true; 
     }; 


     $scope.$watch("endDate", function (new_val, old_val) { 
      if (new_val && moment(new_val).isValid()) { 
       setTravelDateRange($scope.startDate, $scope.endDate); 
      } 
     }, true) 

     function setTravelDateRange(startDate, endDate) { 
      var start_date = moment_with_TAIPEI_TZ(startDate).format("YYYY/MM/DD"); 
      var end_date = moment_with_TAIPEI_TZ(endDate).format("YYYY/MM/DD"); 
      moment(startDate.toDateString()).tz("Asia/Taipei").format("YYYY/MM/DD"); 
      $scope.q_param.startDate = start_date; 
      $scope.q_param.date_range = start_date + "-" + end_date; 
     } 


    }); 

helper.js

function moment_with_TAIPEI_TZ(time){ 
     return moment(time).tz("Asia/Taipei"); 
    } 

    function MOMENT_WITH_LOCAL(time){ 
     return moment(time).local(); 
    } 

    function discard_timezone(value) { 
     return moment.utc(value).format(DEFAULT_MOMENT_TIME_FORMAT); 
    } 

    function getYYYYMMDD(value) { 
     return moment.utc(value).format("YYYY/MM/DD"); 
    } 

    function date_without_timezone(value) { 
     return moment.utc(value).toDate(); 
    } 
+0

也許這是問題在'時間'而不是'datepicker'。 –

+0

聽起來像是一個時區問題,洛杉磯是UTC-0800,東京目前是UTC + 0900,所以在東京17:00,這是洛杉磯的前一天。 – RobG

+0

它不應該有這個奇怪的問題發生,對吧?這完全是一個錯誤的輸出,雖然它可能與時區:( – newBike

回答

0

這可能是因爲時區問題。 能YOUE請儘量轉換成日期不考慮時區

this.convertToDateWithoutTimezone = function (date) { 
      if (date.toString().match(/(\d\d\d\d)-(\d\d)-(\d\d)/)) { 
       var year = $filter('date')(date.slice(0, 10), 'yyyy'), 
        month = $filter('date')(date.slice(0, 10), 'MM'), 
        day = $filter('date')(date.slice(0, 10), 'dd'); 
       return new Date(year, month - 1, day); 
      } 
      else { 
       return new Date(date); 
      } 

};

+0

我會稍後嘗試你的解決方案,謝謝你的支持:D – newBike

+0

根本不工作T__T – newBike

+0

輸入的日期格式是什麼?你得到什麼aftr轉換? –