Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AngularJS和MomentJS处理日期问题_Angularjs_Angular Ui Bootstrap_Momentjs_Bootstrap Datepicker_Angular Moment - Fatal编程技术网

使用AngularJS和MomentJS处理日期问题

使用AngularJS和MomentJS处理日期问题,angularjs,angular-ui-bootstrap,momentjs,bootstrap-datepicker,angular-moment,Angularjs,Angular Ui Bootstrap,Momentjs,Bootstrap Datepicker,Angular Moment,我使用日期选择器和时间选择器让用户选择特定的日期和时间。在我的控制器中,我打算合并所选日期和所选时间 我正在使用AngularJS、Bootstrap、AngularUI Boostrap和MomentJS的最新生产版本。我也添加了最新的角度力矩,但不确定它是否/如何有助于解决下面提到的问题 我会用datetimepicker,但有太多的东西可供选择,而没有 花了很多时间去弄清楚哪一个做了我需要的一切 (验证、屏蔽、引导v3、对其他日期时间选择器的依赖性等) 在我的应用程序中,我已经包括了Mom

我使用日期选择器和时间选择器让用户选择特定的日期和时间。在我的控制器中,我打算合并所选日期和所选时间

我正在使用AngularJS、Bootstrap、AngularUI Boostrap和MomentJS的最新生产版本。我也添加了最新的角度力矩,但不确定它是否/如何有助于解决下面提到的问题

我会用datetimepicker,但有太多的东西可供选择,而没有 花了很多时间去弄清楚哪一个做了我需要的一切 (验证、屏蔽、引导v3、对其他日期时间选择器的依赖性等)

在我的应用程序中,我已经包括了MomentJS并成功地将其用于其他目的,但在本例中,我遇到了一个问题,日期选择器和时间选择器都返回了正确的值,但当我将这些日期/时间加载到
矩()
对象中时,MomentJS返回了错误的值

以下是我遇到的一些例子。。。第一个
BeginDate
EndDate
值来自Angular UI引导数据选择器
BeginTime
EndTime
来自同一库的时间选择器

日期选择器和时间选择器示例

<!-- 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>
// 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会让日期和时间变得如此难以处理?(我可以稍后在谷歌上搜索,只是发泄一下。)

我想可能是语法有点不对劲了。试试这样的方法:


var beginDate=moment($scope.task.beginDate.toString()).format(“MM/DD/YYYY”);

FYI-所有这些信息都是昨天晚上收集的,今天发布的。在今天的测试中,我发现现在的月份从8个减少到了6个。这就是导致我得到实际工作的测试代码的原因。所有日期和时间都是使用此。。。(并且没有折旧警告)var beginDate=$scope.task.beginDate.toString();var beginTime=$scope.task.beginTime.toString();var beginDateMoment=时刻(新日期(beginDate));console.log(“beginDateMoment=+beginDateMoment.format”(“MM/DD/yyyyyy”);var begintimement=时刻(新日期(beginTime));console.log(“begintimement=”+begintimement.format(“HH:mm A”));格式在注释中不起作用…基本上,这里的修复方法是将字符串传递到矩构造函数中。我现在使用指令中的字符串,并从中创建日期对象。从那里,我使用这些日期对象创建矩对象。使用这种方法一切都很好。@WillStrohl-非常好,我很高兴这能为你指出正确的方向!快乐编码!