我的功能每500ms循环一次,并收集日期信息:
var mlptoday = {};
var timer = setTimeout(today,500);
function today(){
var d = new Date()
mlptoday.date = checkTime(d.getDate()); //output: "27"
mlptoday.year = d.getFullYear(); //output: "2013"
mlptoday.month = checkTime(d.getMonth()+1); //output: "01"
}
function checkTime(i) { if (i<10){i="0" + i} return i }
在另一个函数中,我想检查用户输入的日期是在同一天,还是在给定日期之后。
示例输入可能是:2013.01.27
。
我使用这段代码来实现我想要的目标:
var remTime = "2013.01.27"; //user input
var remTimeArray = remTime.split('.') //output: ["2013","01","27"]
if (
!(remTimeArray[0] >= parent.mlptoday.year &&
remTimeArray[1] >= parent.mlptoday.month) ||
!((remTimeArray[1] == parent.mlptoday.month) ? Boolean(remTimeArray[2]*1 >= parent.mlptoday.date) : true)
){
//the input date is in the past
}
正如你可能猜到的那样,这不起作用。条件语句似乎让我失望,因为如果我用Boolean(...)
反转!(...)
,它将永远不会触发错误,否则它将永远。
这里是一个jsFiddle,它应该在哪里工作:http://jsfiddle.net/DJDavid98/Cy6Ms/3/
我需要更好的方法来做到这一点,而且我不想使用任何日期选择器插件。
答案 0 :(得分:1)
我会将日期作为整数进行比较,以避免复杂的逻辑。
var todayConcat = "" + parent.mlptoday.year + parent.mlptoday.month + parent.mlptoday.date;
var remTimeConcat = remTime.replace(/\./g, "");
if (remTimeConcat < todayConcat) {
//the input time is in the past
}
确保日期和月份始终具有前导零。