0

我有这两个var的curdate和sdate ...sdate是某人输入的标准字符串,然后它与curdate进行比较。curdate 是来自 smarty 模板的日期字段(以 mm/dd/yyyy 格式显示今天的日期)

在将 sdate 与 curdate 进行比较之前,我需要将其转换为相同的类型格式,这样就不会有人输入类似 jan/12/2013 之类的内容……它不会匹配并会向他们显示此消息。

if(sdate > curdate){
    var d= confirm("The date you selected: " + sdate + " is in the future, OK to continue?");
    if(!d) return false;
}
4

3 回答 3

1

例如,您可以“限制”客户端输入将使用 JavaScript 的内容,以确保输入的数据是数字。使用该数字输入,您可以轻松构建所需格式的字符串。
我已经设置了这个小提琴,几乎与下面的代码相同。小提琴也做了一些基本的检查(比如不接受日期 à la 33/54/1001),也解析日期。输入完整日期后,单击按钮并检查控制台中的输出:它是一个常规日期对象,可以与另一个日期对象进行比较(例如今天的:)curdate = new Date();
但是为了让您开始,这里有一个简化版本的按键处理程序,它处理用户输入:

var keypress = function(e)
{
    e = e || window.event;//FROM HERE
    var el = e.target || e.srcElement,
    char = String.fromCharCode(e.keyCode || e.which);
    e.returnValue = false;
    e.cancelBubble = true;
    if (e.preventDefault)
    {
        e.preventDefault();
        e.stopPropagation();
    }//TO HERE, a lot of X-browser issues are adressed
    if (char == +(char) && el.value.length < 10)
    {//format input:
        el.value = (el.value + char).replace(/^([0-9]{0,2})\/*([0-9]{0,2})\/*([0-9]{0,4})$/,function(all, m, d, y)
         {
             m += m.length === 2 ? '/' : '';
             d += d.length === 2 ? '/' : '';
             return m+d+y;
         });
    }
    return e;//done
};
var dateIn = document.getElementById('dateInputElement');
if (dateIn.addEventListener)
{//add event handlers
    dateIn.addEventListener('keypress',keypress, false);
}
else
{
    return dateIn.attachEvent('onkeypress',keypress);
}

为了更好地理解这段代码,您可能想看看这里这里

于 2013-05-03T14:25:26.007 回答
1

您可以使用Date.js 之类的库将用户输入的字符串和其他类似日期的值解析为已知格式。然后直接比较。

if (Date.parse(sdate) > Date.parse(curdate)) {
  ...
}
于 2013-05-03T14:37:59.927 回答
1

使用moment.js,您可以执行以下操作:

if (moment(sdate, 'MM/DD/YYYY') > moment(curdate))
...

如果您说那curdate代表“现在”,那么只需执行以下操作:

if (moment(sdate, 'MM/DD/YYYY') > moment())
...

如果要确保日期采用特定格式,可以使用它们的验证功能:

if (moment(sdate, 'MM/DD/YYYY').isValid())
...
于 2013-05-03T14:42:54.293 回答