输入中的日期与保存在数据库中的日期不同

时间:2016-08-12 06:12:29

标签: javascript angularjs node.js strongloop apic

我使用类型日期来获取日期,但我选择的日期和数据库中保存的日期不同。保存的日期始终是我选择日期的前一天。例如,在我的输入中,日期是8月8日,但在数据库中它保存为8月8日。我如何解决此问题以及如何在没有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();
    }]) 

3 个答案:

答案 0 :(得分:0)

这是由于日期的时区值以及您输入日期的机器与运行数据库的服务器之间存在一些差异。如果您只想保存简单日期字符串,请使用getDay()或getFullYear等Date对象方法创建日期字符串,然后将其保存到数据库中。

答案 1 :(得分: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中处理日期对于使用vanilla 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>

答案 2 :(得分:0)

尝试基本日期过滤器或角度

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