Javascript HTML5日期验证

Javascript HTML5日期验证,javascript,regex,html,Javascript,Regex,Html,我希望为一个移动站点实施验证,我有两个输入字段,我希望第一个字段不迟于今天的日期验证值,第二个字段不迟于第一个值的一年前验证值 例如 第一个值=26/11/2013 第二个值不能包含晚于2014年11月26日的值 这可能吗?使用javascript会更好。我可以使用HTML5 attribute type=“date”,但请记住它是我喜欢的。它使处理日期和时间变得更容易 首先,让我们确定一天“在明天之前”。这将取决于明天的定义 var m = moment("26/11/2013", "MM

我希望为一个移动站点实施验证,我有两个输入字段,我希望第一个字段不迟于今天的日期验证值,第二个字段不迟于第一个值的一年前验证值

例如

  • 第一个值=26/11/2013
  • 第二个值不能包含晚于2014年11月26日的值

这可能吗?

使用javascript会更好。我可以使用HTML5 attribute type=“date”,但请记住它是我喜欢的。它使处理日期和时间变得更容易

首先,让我们确定一天“在明天之前”。这将取决于明天的定义

var m = moment("26/11/2013", "MM/DD/YYYY");
// tomorrow this time
var t = moment().add("days", 1);
// tomorrow start of day
var tomorrow = moment([t.year(), t.month(), t.date()]);
if (m.lessThan(tomorrow)) {
   // today!!! (or before)
}
类似地,同样的方法可以在一年后使用。在这种情况下,不关心时间成分可能已经足够好了,我已经在另一天努力了——但如果这很重要(例如,寻找一天的开始),请参见前面的示例

var m = moment("26/11/2013", "MM/DD/YYYY");
var aYearFromNow = moment().add("years", 1).add("days", 1);
if (m.lessThan(aYearFromNow)) {
   // still less than a year!
}
1) 缓存元素

var d1 = document.getElementById('date1');
var d2 = document.getElementById('date2');
2)
d1
d2
的值是
字符串
数据类型。因此,将它们拆分并解析为如下所示的最新格式

var t = d1.value.split("-");
var date = new Date(parseInt(t[0], 10) + 1, parseInt(t[1], 10), t[2]);
此处,年份根据
d1
中的值递增1

4) 再次将其解析回字符串格式(YYYY-MM-DD)

5) 将此设置为
d2的
max
属性的值

d2.setAttribute("max", maxi);
最后,将以下方法添加到
d1
onblur事件中

function setMaxDate() {
    var d1 = document.getElementById('date1');
    var d2 = document.getElementById('date2');
    var t = d1.value.split("-");
    var date = new Date(parseInt(t[0], 10) + 1, parseInt(t[1], 10), t[2]);
    var maxi = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate();    
    d2.setAttribute("max", maxi);
}

您可以使用这样的正则表达式模式
/([0-9]{2})/([0-9]{2})/([0-9]{4})/
,即两个十进制数字、一个斜杠、两个以上的十进制数字、一个斜杠和四个十进制数字,所有内容都分别分组(第1组=天、第2组=月、第3组=年)。您可以在一个事件中测试此模式(我建议
onchange
,因为您提到了mobile),还可以检查数字是否在有效范围内(例如,天<32,月<13,年您需要使用jqury脚本。HTML5否Option@Deekey不一定是jQuery,只有Javascript。使用Javascript检查日期比较:可能的重复项不使用正则表达式,只使用Javascript。很好,你能传递日期对象作为日期而不仅仅是字符串吗?@PI。当然这个
function setMaxDate() {
    var d1 = document.getElementById('date1');
    var d2 = document.getElementById('date2');
    var t = d1.value.split("-");
    var date = new Date(parseInt(t[0], 10) + 1, parseInt(t[1], 10), t[2]);
    var maxi = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate();    
    d2.setAttribute("max", maxi);
}