使用datetime作为输入,检查日期是否为当前日期或未来日期

3

我正在尝试检查输入在datetime字段中的日期是否是当前日期或未来日期。我已经尝试过:

function validations(){
    var value=document.getElementById("showdate").value;
    if (new Date() > new Date(value)) {
        alert("Past date");
    }
}
<Form method="post" onsubmit="validations()" autocomplete>
    <input type="datetime-local" name="showdate" class="right" required="required" id="showdate">
    <input type="submit">
</form>

但是这段代码只能适用于 date 字段。


4
什么是“值”(value)?即展示如何调用这个函数。 - undefined
1
根据这个fiddle,代码似乎是有效的... - undefined
value 是日期对象还是字符串? - undefined
我编辑了问题。值来自于“datetime”输入字段。 - undefined
由于并非所有正在使用的浏览器都支持日期输入,因此value的值是未知的,在传递给Date构造函数之前应进行测试。 - undefined
显示剩余2条评论
2个回答

2

通常在JS中,比较日期应该尝试使用以下方法:

function isFutureDate(value) {
    d_now = new Date();
    d_inp = new Date(value)
    return d_now.getTime() <= d_inp.getTime();
}

使用Date对象的getTime函数来运行常规比较操作符。


比较的评估不会像调用console.log()那样调用toString()方法。它将获取Date对象的基本值(即Number实例)来执行比较。不需要调用getTime() - undefined
@RobbyCornelissen,是的,你说得对,我删除了我的评论。我不确定比较两个日期对象有什么问题,但据我所知:console.log(new Date() == new Date()); 返回 false,而 console.log(new Date().getTime() == new Date().getTime()); 返回 true。 - undefined
@RobbyCornelissen 那又怎样?如果一个方法在比较对象时被调用(例如 valueOf()),它将会在 ==<= 两种情况下都被调用,你不觉得吗? - undefined
@RobbyCornelissen 好吧,因为你正在比较相同的字符串。以同样的方式,console.log('doge' <= 'doge') 会产生 true - undefined
2
这是"抽象关系比较"和"抽象相等比较"之间的区别。关系比较在两侧都包括toPrimitive()转换,而相等比较则不包括。 - undefined
显示剩余4条评论

0

我相信,如果你调用日期对象的getTime()方法,它将返回日期对象的时间戳表示,这样你就能更好地比较两个日期时间。就像这样:

function isFutureDate(value) {
    return new Date().getTime() <= new Date(value).getTime();
}

和之前的回答一样的问题:直接比较日期对象有什么问题吗?你说你将能够更好地比较这两个日期时间。更好是指怎样的呢? - undefined
请参见 使用JavaScript比较两个日期 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接