【发布时间】:2015-10-23 11:21:49
【问题描述】:
我在我的Angular / Node 应用程序中使用https://github.com/zhaber/angular-js-bootstrap-datetimepicker。
我呈现这样的表单(我不能只使用 ajax,所以我需要以传统方式发布)
index.jade
form(action='/api/save' method='post' enctype='multipart/form-data')
.form-group.m-top-15
datetimepicker(min-date="minDate" minute-step="minuteStep" ng-model="activationDate" show-meridian="false" date-format="yyyy-MM-dd" show-spinners="true")
input(type='hidden' name='activationDate' ng-value='activationDate')
input(type='submit')
app.js
$scope.toggleMinDate = function() {
$scope.minDate = $scope.minDate ? null : new Date();
};
$scope.toggleMinDate();
$scope.minuteStep = 15;
当我选择一个日期并在浏览器中呈现 $scope.activationDate 时,它显示为 "2015-10-23T06:15:00.000Z"
但在请求负载中显示为Fri Oct 23 2015 00:00:00 GMT+0200 (Västeuropa, sommartid)(注意时间未提交)
在我的MongoDB 中,日期保存为ISODate("2015-10-22T22:00:00Z")
为什么时间不工作?如果您需要查看更多代码,请告诉我。谢谢!
【问题讨论】:
-
您是否在发送到 mongo 之前转换日期?
-
看来您需要调整 datetimepicker 的“日期格式”选项。尝试使用“yyyy-MM-dd HH:mm:ss”。
-
@NishithChaturvedi 抱歉,我不知道。我正在使用 Express 和 Mongoose 从 req.body.activationDate 保存日期对象。
-
在发送数据时,您需要更改日期的格式。因为如果它将保存您在 UI 上的格式,那么当您返回显示时,Mongo 将返回不同的日期。您是不设置小时和分钟。所以它取零(默认)
-
@NishithChaturvedi 我在隐藏的输入字段中提交了带有 ng-value 的 $scope.activationDate。范围有正确的时间(因为它在浏览器中工作)。我不明白为什么我一提交表单就将范围时间转换为零......
标签: angularjs forms date bootstrap-datetimepicker