我有一个简单输入类型的表单。我试图定义一个函数来检查日期与输入类型提供的日期相比是否不超过6个月。 我知道我必须转换Date对象中输入提供的String来进行比较,然后处理Date对象的get方法,但我无法弄清楚如何执行此操作。
当前代码:
$scope.compareDates = function(d1) {
d1 = new Date(d1); //convert String into date Object
var d = new Date(); // today date
d.setYear(d.getFullYear());
d.setMonth(d.getMonth() - 6);
if(d1 > d ) {
console.log("ok");
} else {
console.log("error");
}
}
编辑:
对不起,我忘了加我的意见。这是:<input class="form-control" type="text" placeholder="gg/mm/aaaa" ng-model="sStartDate" ng-change="change()">
角度控制器:
$scope.sStartDate = '';
$scope.change = function(){
var startDt = $scope.sStartDate;
$scope.compareDates(startDt);
}
答案 0 :(得分:2)
如果我正确阅读您的代码,您的日期格式为天/月/年,这是无效的格式。你需要交换月份和日期。
var parts = d1.split(),
dateStr = parts[1] + "/" + parts[0] + "/" parts[2],
d1 = new Date(d1),
d = new Date();
d.setMonth(d.getMonth() - 6);
if(d1 > d ) {
console.log("ok");
} else {
console.log("error");
}
答案 1 :(得分:1)
关于使用d.getTime()
的内容是什么?
$scope.compareDates = function(d1){
d1 = new Date(d1); //convert String into date Object
var d = new Date(); // today date
d.setMonth(d.getMonth() - 6);
if(d1.getTime() > d.getTime() ) {
console.log("ok");
} else {
console.log("error");
}
}
问候。
答案 2 :(得分:0)
我在我们的应用程序中使用了momentjs。它使这个过程非常容易和顺利。
// is6MonthsOld will be a boolean value
var is6MonthsOld = moment(d1).isBefore(moment().subtract(6, 'months'));
答案 3 :(得分:0)
如果您要比较dates
而不是time
,请确保使用d1.setHours(0,0,0,0)
重置日期对象中的时间。
执行new Date()
时,输出是datetime
个对象,但是当您执行new Date(2015,6,19)
时,只会分配日期,时间设置为00:00:00
。
以下代码描述了相同的内容:
function compareDates(d1,d2){
return +d2 > +d1;
}
function compareDatesWithHoursReset(d1,d2){
d1.setHours(0,0,0,0);
d2.setHours(0,0,0,0);
return +d2 > +d1;
}
function main(){
var d1 = new Date();
var d2 = new Date(2015, 6, 19);
d1.setMonth(d1.getMonth() - 6)
console.log(d1);
console.log(d2);
console.log(compareDates(d2,d1))
console.log(compareDatesWithHoursReset(d2,d1))
}
main();