首页 > 解决方案 > javascript,如何验证文本框格式的日期范围?

问题描述

我正在研究特定的框架,并且内置日期框没有选择小时:分钟:秒的选项。所以我使用文本框为搜索引擎创建了这种格式,一切正常。我唯一担心的是,如果我不限制从 DATE1 到 DATE2 的新日期范围,这会提取太多数据。如何在将脚本实际发送到数据库之前设置 1 个月的限制?

var today = new Date();
today.setDate(today.getDate() - 1);

    var DATE1 = new TextBox({
            applyTo: 'DATE1',
            defaultValue: today.getFullYear() + "-" + ("0" + (today.getMonth() + 1)).slice(-2) +
            "-" + ("0" + today.getDate()).slice(-2) +" " + "00:00:00",
            width: 150
        });

        var DATE2 = new TextBox({
            applyTo: 'DATE2',
            defaultValue: new Date().getFullYear() + "-" + ("0" + (new Date().getMonth() + 1)).slice(-2) +
            "-" + ("0" + new Date().getDate()).slice(-2) +" " + "00:00:00",
            width: 150
        });


    btnSearch.on('click', function(){             
                 var datea = DATE1.getValue() ? DATE1.getValue() : "";
                 var dateb = DATE2.getValue() ? DATE2.getValue() : "";
    }

显然.. 像 if((dateb-datea) > 31) 这样的东西是行不通的。帮助。:(

标签: javascriptjava

解决方案


实际上,您绝对可以在 JS 中减去日期对象。唯一的问题是结果以毫秒数的形式出现。

new Date('2020-03-15') - new Date('2020-03-10')
=> 432000000 
432000000 / (1000 * 60 * 60 * 24)
=> 5

编辑:

由于实际数据值从文本框转换为对象

如果此用例可以接受固定的天数距离,那么只需进行减法(使用适当的比例因子)就足够了。

但是,由于您想要检查(例如)今天的日期是否为 2020-03-22 并且下一个日期不迟于 2020-04-22,那么您需要在该月实际执行逻辑并且每个日期的天值。

例如

if (!(dateb.getMonth() > datea.getMonth() && dateb.getDate() > datea.getDate())) {
// ... 
}

编辑:

DATE1.getValue() 将文本框的值作为字符串返回,因此您需要将该字符串转换为某种数据对象,以便更轻松地进行逻辑测试。Date 类可以接受时间作为其构造函数的输入字符串的一部分,但字符串需要采用类识别的格式之一(例如YYYY-MM-DDTHH:MM:SSZ,其中“T”是字母 T,“Z”代表时间区域 - 请参阅https://www.w3schools.com/js/js_date_formats.asp)。您需要稍微调整一下字符串,但这似乎并不太复杂。下面的准伪代码示例。

btnSearch.on('click', function(){             
  if (DATE1.getValue() && DATE2.getValue()) { // Ensure that both values exist.
    var firstDateObject = new Date(
      DATE1.getValue().split(' ').join('T') + <timezone stuff>
    );
    var secondDateObject = new Date(
      DATE2.getValue().split(' ').join('T') + <timezone stuff>
    );
    // Do some logic...
  }
}

推荐阅读