2016-08-12 106 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>