4

検証のためにこのフィドルを見ましたが、フォーマットmm/dd/yyyy or mm-dd-yyyyを検証したいのyyyy-mm-dd hh:mm:ssですが、今日がフォーマットの日付よりも小さいことを確認するにはどうすればよいyyyy-mm-dd hh:mm:ssですか?.

これが、日時ピッカーを開始した方法です..

$("#startDate, #endDate").datetimepicker({ dateFormat: 'yyyy-mm-dd hh:mm:ss'}); 

これを成し遂げるのを手伝ってください。

ありがとう

4

4 に答える 4

4

文字列を相互にチェックyyyy-mm-dd hh:mm:ssするのは非常に簡単です。数値が何を基数としているかを忘れて、単純に<or>を文字列比較のように行うことができます。これは、他の日付では機能しない場合があります。

function compISOZDate(d1, d2) { // d1 is
    if (d1  <  d2) return -1;   //    smaller
    if (d1 === d2) return  0;   //    the same
    /*   else   */ return  1;   //    bigger
}

月の日数が変わる可能性があるため、日付の検証はもう少し複雑です。この事実を無視して数字をテストするだけでもかまいませんが、上限を導入して途中で会うことを好みます。

function verifyMyDate(d) {
    var re = /^\d{4}-(0[1-9]|1[0-2])-([0-2]\d|3[01]) (0\d|1[01]):[0-5]\d:[0-5]\d$/;
    //         yyyy -       MM      -       dd           hh     :   mm  :   ss
    return re.test(d);
}

たとえば、それを使用して

var d1 = '2013-10-07 11:58:26',
    d2 = '2012-06-14 19:22:03';
// check
if (!verifyMyDate(d1)) throw new Error('Invalid date: ' + d1);
if (!verifyMyDate(d2)) throw new Error('Invalid date: ' + d2);
// compare
compISOZDate(d1, d2); //  1, d1 is bigger than d2
// also
compISOZDate(d2, d1); // -1
compISOZDate(d1, d1); //  0

あとは、入力から値を取得するだけです。

于 2013-10-07T11:14:34.993 に答える
4

指定した日付形式はISO 8601です。最新のブラウザーのほとんどは、この文字列形式の解析をサポートしています。したがって、このようなことができます。Date

Javascript

var iso8601 = "2013-02-01 10:00:00",
    userDate = new Date(iso8601),
    today = new Date(),
    dateTime,
    date,
    time,
    value;

// check is valid date
if (isNaN(userDate)) {
    alert("invalid userDate");
}

// check if userDate is before today
if (userDate.getDate() < today.getDate()) {
    alert("userDate is in past");
}

// check the string specifically matches "yyyy-mm-dd hh:mm:ss" and is valid
function isGregorianLeapYear(year) {
    return year % 400 === 0 || year % 100 !== 0 && year % 4 === 0;
}

function daysInGregorianMonth(year, month) {
    var days;

    if (month == 2) {
        days = 28;
        if (isGregorianLeapYear(year)) {
            days += 1;
        }
    } else {
        days = 31 - ((month - 1) % 7 % 2);
    }

    return days;
}

if (typeof iso8601 !== "string") {
    alert("not an iso8601 string");
} else {
    dateTime = iso8601.split(" ");
    if (dateTime.length !== 2) {
        alert("missing date or time element");
    } else {
        date = dateTime[0].split("-");
        if (date.length !== 3) {
            alert("incorrect number of date elements");
        } else {
            value = +date[0];
            if (date[0].length !== 4 || value < -9999 || value > 9999) {
                alert("year value is incorrect");
            }

            value = +date[1];
            if (date[1].length !== 2 || value < 1 || value > 12) {
                alert("month value is incorrect");
            }

            value = +date[2];
            if (date[2].length !== 2 || value < 1 || value > daysInGregorianMonth(+date[0], +date[1])) {
                alert("day value is incorrect");
            }
        }

        time = dateTime[1].split(":");
        if (time.length !== 3) {
            alert("incorrect number of time elements");
        } else {
            value = +time[0];
            if (time[0].length !== 2 || value < 0 || value > 23) {
                alert("hour value is incorrect");
            }

            value = +time[1];
            if (time[1].length !== 2 || value < 0 || value > 59) {
                alert("minute value is incorrect");
            }

            value = +time[2];
            if (time[2].length !== 2 || value < 0 || value > 59) {
                alert("second value is incorrect");
            }
        }
    }
}
console.log(userDate);
console.log(today);

jsフィドル

于 2013-10-07T11:17:08.203 に答える
1

ValidateDate 関数内の RegExp を以下のコードに変更します

function ValidateDate(dtValue)
{
   var dtRegex = new RegExp(/\b\d{4}[\/-]\d{1,2}[\/-]\b\d{1,2} (0\d|1[01]):[0-5]\d:[0-5]\d$\b/);
   return dtRegex.test(dtValue);
}

これを試して教えてください。同じ方法で hh:mm:ss も検証できます

于 2013-10-07T11:22:33.000 に答える