使用 AngularJS 和 MomentJS 的日期操作 issues/questions
Date manipulation issues/questions using AngularJS and MomentJS
我正在使用日期选择器和时间选择器让用户选择特定的日期和时间。在我的控制器中,我打算合并所选日期和所选时间。
我使用的是 AngularJS、Bootstrap、Angular UI-Boostrap 和 MomentJS 的最新生产版本。我也添加了最新的 Angular-Moment,但不确定 if/how 它是否有助于解决下面提到的问题。
I'd use a datetimepicker, but there's too many to choose from and not
a lot of time to figure out which one does everything I need
(validation, masking, bootstrap v3, dependency on other datetimepickers, etc.).
在我的应用程序中,我已经包含并成功地将 MomentJS 用于其他目的,但在这种情况下,我遇到了一个问题,即日期选择器和时间选择器都返回了正确的值,但 MomentJS 返回了错误的值当我将那些 dates/times 加载到 moment()
对象中时。
这是我 运行 的一些示例...首先 BeginDate
和 EndDate
值来自 Angular UI -Bootstrap 日期选择器。 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 使日期和时间如此难以处理? (我可以 Google 那个以后 - 只是发泄一下。)
我认为 Moment 语法可能有点偏差。尝试这样的事情:
var beginDate = moment($scope.task.BeginDate.toString()).format("MM/DD/YYYY");
我正在使用日期选择器和时间选择器让用户选择特定的日期和时间。在我的控制器中,我打算合并所选日期和所选时间。
我使用的是 AngularJS、Bootstrap、Angular UI-Boostrap 和 MomentJS 的最新生产版本。我也添加了最新的 Angular-Moment,但不确定 if/how 它是否有助于解决下面提到的问题。
I'd use a datetimepicker, but there's too many to choose from and not a lot of time to figure out which one does everything I need (validation, masking, bootstrap v3, dependency on other datetimepickers, etc.).
在我的应用程序中,我已经包含并成功地将 MomentJS 用于其他目的,但在这种情况下,我遇到了一个问题,即日期选择器和时间选择器都返回了正确的值,但 MomentJS 返回了错误的值当我将那些 dates/times 加载到 moment()
对象中时。
这是我 运行 的一些示例...首先 BeginDate
和 EndDate
值来自 Angular UI -Bootstrap 日期选择器。 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 使日期和时间如此难以处理? (我可以 Google 那个以后 - 只是发泄一下。)
我认为 Moment 语法可能有点偏差。尝试这样的事情:
var beginDate = moment($scope.task.BeginDate.toString()).format("MM/DD/YYYY");