【问题标题】:Logic to use to find out if the entered date is today or later用于确定输入日期是今天还是以后的逻辑
【发布时间】:2013-01-26 23:44:51
【问题描述】:

我的函数每 500 毫秒循环一次,并收集日期信息:

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

我使用这段代码的 sn-p 来实现我想要的:

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/

我需要一个更好的方法来做到这一点,我不想使用任何日期选择器插件。

【问题讨论】:

    标签: javascript date if-statement logic


    【解决方案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
    }
    

    只要确保日期和月份总是以零开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 2012-01-03
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多