我的代码中有以下代码controller
:
$scope.a="26-04-2016";
$scope.c = moment($scope.a,"DD-MM-YYYY").format("DD-MM-YYYY");
$scope.b="20-10-2016";
$scope.d = moment($scope.b,"DD-MM-YYYY").format("DD-MM-YYYY");
if($scope.d <= $scope.c){
alert($scope.d+' es menor a '+$scope.c)
}else{
alert($scope.d+' es mayor a '+$scope.c)
}
有了这个,我比较了20-10-2016
和之间的两个日期26-04-2016
,乍一看就知道20-10-2016
大于,26-04-2016
但是当执行这段代码时,它给我的结果是它小于。
问题是什么?
问题是这样的:
这是多余的,这也是您将日期作为字符串而不是 javascript 对象进行比较的原因,当您比较字符串时,它们会根据遵循不同步骤(步骤 4)的比较算法
Date
或多或少地为您提供,就好像两个操作数一样该算法的日期(步骤 3)。所以可能的解决方案可以是
不要处理
moment
原始对象并使用方法进行比较(推荐)isSame
(===
)isBefore
(<
)isAfter
(>
)isSameOrBefore
(<=
)isSameOrAfter
(>=
)这是一个例子
moment
为Date
并使用相应的方法进行比较最后,我建议您使用ISO 8601格式处理您的日期。这不是强制性的,但它是标准,它将使您不必在程序中进行大量的日期格式转换。
您还可以将它们作为 JSON 进行比较,即:
就在昨天,我用 AngularJS (Angular 1) 尝试过它并且它有效:)
.format() 将日期(时刻对象)转换为文本字符串。如果使用标准格式,按年、月、日排序不会有问题。但是您指出输出格式是日、月、年,因此在比较文本字符串时,它会将它们视为数字,而不是日期,因此 26042016 大于 20102016。
解决方案是直接比较矩对象,或者使用矩比较函数:isBefore() 和 isAfter()。然后在显示变量时给出格式。
我无法测试它,但我认为这对你有用