【问题标题】:Using AngularJS datetimepicker, form not submitting correct time使用AngularJS datetimepicker,表单没有提交正确的时间
【发布时间】: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


【解决方案1】:

显示日期时需要使用过滤器

{{activationDate| date:'MM/dd/yyyy HH:mm:ss'}}

【讨论】:

  • 感谢您的回复,但我的问题与显示无关。它在浏览器中正确显示,包括时间,但只要我提交表单,它就会清除时间设置。我试图编辑“日期格式”选项,但没有成功。
【解决方案2】:

我能够使用不同的日期时间选择器解决此问题

https://github.com/Gillardo/bootstrap-ui-datetime-picker

现在我可以成功发布日期和时间了。

【讨论】:

  • 对,那个插件没有发送完整的日期,你的时间设置为 0
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2017-08-12
  • 2013-06-21
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多