2016-08-12 108 views
0

我使用類型日期來獲取日期,但我選擇的日期和保存在數據庫中的日期不同。保存的日期將始終是我選擇日期的前一天。例如,在我的輸入中,日期是8月8日,但在數據庫中它保存爲8月8日。我如何去abt修復此問題,以及如何顯示沒有T16:00:00.000Z的日期。 displayed date輸入日期與保存在數據庫中的日期不同

dairy.html

<div> 
<label> Date: </label> 
<input type="date" ng-model="diary.date"> 
</div> 

data.html

<table style="width:90%" align="center" class="t3" ng-controller="RetrieveDiaryController"> 
      <tr> 
        <th style="width:40%">Date</th> 
        <th style="width:30%">Type</th> 
        <th style="width:30%">Level</th> 
      </tr> 
     <tr ng-repeat="d in diaries | orderBy:'date':true"> 
     <td>{{d.date}}</td> 
     <td>{{d.taken}}</td> 
     <td>{{d.level}}</td> 
     </tr> 
    </table> 

health.js

controller('TrackingController', ['$scope', 'Diary', '$state', function($scope, Diary, $state) { 
    $scope.diaries = []; 

$scope.submitForm = function() { 
    Diary 
    .upsert({ 
     date: $scope.diary.date, 
     taken: $scope.diary.taken, 
     level: $scope.diary.level 
    }) 
    .$promise 
    .then(function() { 
     $state.go('data'); 
    }); 
}; 
    }]) 
    .controller('RetrieveDiaryController', ['$scope', 'Diary', function ($scope, Diary) { 
     $scope.diaries = Diary.find(); 
    }]) 

回答

0

這是由於日期的時區值以及您在輸入日期的機器和運行db的服務器之間的某些差異造成的。如果您只想保存簡單的日期字符串,請使用Date對象方法(如getDay()或getFullYear)創建日期字符串,然後將其保存到數據庫中。

0

YYYY-MM-DDTHH:mm:ss.SSSUTC的標準ISO日期時間格式。如果您想以YYYY-MM-DD的格式獲取它,而不將其轉換爲當地時間,則可以這樣做。

//used for padding left with 0 on one character strings. e.g. "1" => "01" 
var pad = function(str){ str = str.toString(); return "00".substring(0, 2-str.length) + str; } 

var date = new Date("2016-08-02T16:00:00.000Z"); 
var utcdatestring = date.getUTCFullYear() + "-" + pad(date.getUTCMonth() + 1) + "-" + pad(date.getUTCDate()); 
console.log(utcdatestring); //Logs "2016-08-02" 

不過,我強烈建議使用Moment.js,因爲在JavaScript中日期的工作是與香草的JavaScript真的很麻煩。

var date = moment.utc("2016-08-02T23:00:00.000Z"); //parse datetime string as utc date 
 
var utcdatestring = date.format("YYYY-MM-DD"); //use .format() to get date string in any format you want 
 
console.log(utcdatestring); // Logs "2016-08-02"
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.js"></script>

0

嘗試的基本日期過濾器或角

<!DOCTYPE html> 
 
<html> 
 
\t <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
\t <body> 
 
\t \t <div ng-app="myApp" ng-controller="datCtrl" ng-model="test='2016-08-02T16:00:00.000Z'"> 
 
\t \t \t <p>Date = {{ test| date }}</p> 
 
\t \t </div> 
 
\t \t <script> 
 
var app = angular.module('myApp', []); 
 
app.controller('datCtrl', function($scope) { 
 
    $scope.today = new Date(); 
 
}); 
 
</script> 
 
\t </body> 
 
</html>