我使用datepicker和timepicker让用户选择特定的日期和时间。在我的控制器中,我打算将所选日期和所选时间结合起来。
我使用的是AngularJS,Bootstrap,Angular UI-Boostrap和MomentJS的最新生产版本。我也添加了最新的Angular-Moment,但不确定它是否/如何帮助解决下面提到的问题。
我使用了datetimepicker,但是有太多可供选择而不是 很多时候弄清楚哪一个能完成我需要的一切 (验证,屏蔽,引导v3,依赖于其他日期时间选择器等)。
在我的应用程序中,我已经包含并成功使用MomentJS用于其他目的,但在这种情况下,我遇到的问题是datepicker和timepicker都返回正确的值,但是MomentJS返回了错误的值当我将这些日期/时间加载到moment()
对象中时。
以下是我遇到的一些示例......首先BeginDate
和EndDate
值来自Angular UI-Bootstrap DatePicker。 BeginTime
和EndTime
来自同一个库的TimePicker。
DatePicker和TimePicker示例
<!-- datepicker nearly mirrors the example on the ui-bootstrap docs -->
<uib-timepicker ng-model="task.BeginTime" ng-change="TimeChanged()" hour-step="hourSteps" minute-step="minuteSteps" show-meridian="true" required></uib-timepicker>
JS控制台输出示例
// returns correct value: Wed Nov 04 2015 00:00:00 GMT-0800 (Pacific Standard Time)
console.log("$scope.task.BeginDate = " + $scope.task.BeginDate.toString());
// 11/04/2015 selected
// returns correct value: Sat Oct 31 2015 08:00:52 GMT-0700 (Pacific Daylight Time)
console.log("$scope.task.BeginTime = " + $scope.task.BeginTime.toString());
// 08:00 PM selected
// returns correct value: Wed Nov 04 2015 00:00:00 GMT-0800 (Pacific Standard Time)
console.log("$scope.task.EndDate = " + $scope.task.EndDate.toString());
// 11/04/2015 selected
// returns correct value: Sat Oct 31 2015 09:00:52 GMT-0700 (Pacific Daylight Time)
console.log("$scope.task.EndTime = " + $scope.task.EndTime.toString());
// 09:00 PM selected
当我让MomentJS帮助我解析和连接日期和时间时,这种情况变得更糟。 (我已尝试使用和不使用.toString()
。我测试的下一行如下:
// returns: 04/20/2015
var beginDate = moment($scope.task.BeginDate.toString(), "MM/DD/YYYY");
console.log("beginDate = " + beginDate.format("MM/DD/YYYY"));
// returns: Invalid date
var beginTime = moment($scope.task.BeginTime.toString(), "HH:mm A");
console.log("beginTime = " + beginTime.format("HH:mm A"));
// returns: 04/20/2015
var endDate = moment($scope.task.EndDate.toString(), "MM/DD/YYYY");
console.log("endDate = " + endDate.format("MM/DD/YYYY"));
// returns: Invalid date
var endTime = moment($scope.task.EndTime.toString(), "HH:mm A");
console.log("endTime = " + endTime.format("HH:mm A"));
如果我现在合并日期和时间,我当然会返回04/20/2015 00:00 AM
。
为什么日期更改为8个月前?
为什么加载到MomentJS后时间是无效日期?
你是如何建议我解决的?
为什么世界上的JavaScript会让日期和时间难以使用? (稍后我可以谷歌 - 只是发泄。)
答案 0 :(得分:2)
我想也许Moment的语法有些偏差。尝试这样的事情:
var beginDate = moment($ scope.task.BeginDate.toString())。format(&#34; MM / DD / YYYY&#34;);