我使用一个数据报警器和一个时间选择器让用户选择一个特定的日期和时间。在我的控制器中,我打算将选定的日期和选定的时间组合起来。
我正在使用最新的生产版本的AngularJS,引导,角用户界面引导,和MomentJS。我也添加了最新的角度矩,但不确定它是否/如何帮助解决下面提到的问题。
我会使用日期选择器,但是有太多的时间可供选择,也没有太多的时间来确定哪一个完成了我所需要的一切(验证、掩蔽、引导v3、依赖其他日期选择器等等)。
在我的应用程序中,我已经为其他目的包括并成功地使用了MomentJS,但在本例中,我遇到了一个问题,即数据采集器和时间选择器都返回正确的值,但是当我将这些日期/时间加载到moment()
对象中时,MomentJS返回了错误的值。
下面是我遇到的一些例子..。第一个BeginDate
,和EndDate
值来自角度UI-引导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使日期和时间如此难以处理?(我可以稍后在谷歌上搜索--只是发泄一下。)
发布于 2015-10-31 11:15:54
我认为,现在的语法可能有点偏离了。试着做这样的事情:
var beginDate =beginDate
https://stackoverflow.com/questions/33454996
复制