0

我有一个这种格式的日期字符串 - “DD-MM-YYYY”这验证成功:

var dateFormat = /(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-\d{4}/ ;
if(!startDate.match(dateFormat)){
    alert("'Start Date' must be in format: DD-MM-YYYY");
    return false;

我需要检查插入的日期是否在今天的日期(或今天的日期)之后。我怎么能用 JavaScript 做到这一点?

我试过这个: http ://www.redips.net/javascript/date-validation/ 用分隔符,没用。建议?

4

6 回答 6

5

首先,这是您在 javascript 中的当前日期:

var today = new Date();
var day = today.getDate();
var month = today.getMonth()+1; // Zero indexed

从这里开始,您需要做的就是将其与您的开始日期进行比较!

最好的祝福!

看看这个也许有助于理解日期对象。

于 2012-05-09T21:10:47.977 回答
2

查看date.js,特别是...

http://code.google.com/p/datejs/wiki/APIDocumentation#compare

比较第一个日期和第二个日期并返回它们相对值的数字指示。-1 = 这是 < 日期。0 = 值相等。1 = 这是 > 日期。

和方法可能对您的问题有用isAfter():)isBefore()

在此处下载库:

http://code.google.com/p/datejs/downloads/detail?name=date.js&can=2&q=


此外,值得一提的是 checkout moment.js。我认为这两个库是相辅相成的。

于 2012-05-09T21:09:11.917 回答
2

你可以很容易地用moment.js做到这一点。

var input = moment(startDate, "DD-MM-YYYY");
if (input < moment()) {
    // before today
} else {
    // after today
}

我们还将很快添加日期验证。在此处查看有关验证的更多信息:https ://github.com/timrwood/moment/pull/306

于 2012-05-11T22:46:20.147 回答
1

像这样的东西应该工作。可以使用一些清理,但希望能得到重点。

var dateFormat = /(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(\d{4})/;
var dateMatch = startDate.exec(dateFormat);
var today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0); today.setMilliseconds(0);

if ((new Date(dateMatch[3], dateMatch[2] - 1, dateMatch[1])).getTime() >= today.getTime()) {
    // Date is after or on today
}
于 2012-05-09T21:06:26.700 回答
1

您应该检查每种日期getTime()方法并进行比较。它简单明了,您不需要额外的框架。

这是一个从字符串中解析日期,然后比较它们的示例:

var todayDate = "10-05-2012";​ // A sample date
var compareDate1 = "10-05-2012";
var compareDate2 = "03-05-2012";
var compareDate3 = "10-07-2012";

compareDates(todayDate, compareDate1);
compareDates(todayDate, compareDate2);
compareDates(todayDate, compareDate3);

function compareDates(date1String, date2String) {
    var date1 = parseDate(date1String);
    var date2 = parseDate(date2String);
    if(date1.getTime() > date2.getTime()) {
      alert("First date(" + date1String + ") is older than second date(" + date2String + ").");                
    } else if(date1.getTime() < date2.getTime()) {
      alert("First date(" + date1String + ") is younger than second date(" + date2String + ").");                
    } else {
      alert("The dates are the same day");   
    }
}

function parseDate(stringDateParam) {
    var parsedDay = parseInt(stringDateParam.substring(0,2));
    var parsedMonth = parseInt(stringDateParam.substring(3,5))-1;
    var parsedYear = parseInt(stringDateParam.substring(6,10));
    var parsedDate = new Date(parsedYear, parsedMonth, parsedDay, 0 , 0, 0, 0);
    return parsedDate;
}
​

// Output:
//
// First check: The dates are the same day
// Second check: First date(10-05-2012) is older than second date(03-05-2012).
// Third check: First date(10-05-2012) is younger than second date(10-07-2012).

您可能已经有一个将字符串解析为日期对象的函数,并且您应该实现类似于compareDates基于getTime()函数的 in 函数的检查。

如果您还有其他问题,请发表评论。祝你好运!

JSFiddle 工作示例:点击这里

于 2012-05-09T21:40:02.387 回答
0

谢谢你们!这成功了:

var today = new Date();
var Tday = today.getDate();
var Tmonth = today.getMonth()+1; // Zero indexed
var Tyear = today.getFullYear();

var aoDate;
var separator= '-';
aoDate = startDate.split(separator);

var month = aoDate[1] - 0;
    var day = aoDate[0] - 0;
    var year = aoDate[2] - 0;

    if(year < Tyear){
        alert("'Start Date' must be today or after today!");
    return false;
    }
    if((year == Tyear) && (month < Tmonth)){
        alert("'Start Date' must be today or after today!");
    return false;
    }
    if((year == Tyear) && (month == Tmonth) && (day < Tday)){
        alert("'Start Date' must be today or after today!");
    return false;
    }
于 2012-05-10T07:19:35.487 回答