0

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/

これを行うためのより良い方法が必要であり、日付ピッカープラグインを使用したくありません。

4

1 に答える 1

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
}

日付と月の先頭が常にゼロであることを確認してください。

于 2013-01-27T00:15:59.503 に答える