我想告诉JS中有效和无效日期对象之间的区别,但无法弄清楚如何:
var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'
Run Code Online (Sandbox Code Playgroud)
编写isValidDate函数的任何想法?
Date.parse用于解析日期字符串,它提供了一种检查日期字符串是否有效的权威方法.Date实例,这最容易验证.Date实例,然后测试它Date的时间值.如果日期无效,则时间值为NaN.我用ECMA-262检查了这个行为是标准的,这正是我正在寻找的.以下是场景:
我有一个不同的String日期和日期格式.例:
日期:2016-10-19
dateFormat:"DD-MM-YYYY".
我需要检查这个日期是否有效.
我试过以下事情
var d = moment("2016-10-19",dateFormat);
Run Code Online (Sandbox Code Playgroud)
d.isValid()false每次都会回来.Moment.js是否以给定格式解析日期?
然后我尝试DD-MM-YYYY先将日期格式化,然后将其传递给Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Run Code Online (Sandbox Code Playgroud)
现在date.isValid()给我想要的结果,但是这里Moment.js日期对象被创建了两次.我怎么能避免这个?有更好的解决方案吗?
仅供参考我不允许改变dateFormat.
我正在尝试编写一个验证日期的正则表达式.正则表达式需要匹配以下内容
到目前为止我有
^(([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d)|((1[012]|0[1-9])(3[01]|2\d|1\d|0[1-9])(19|20)\d\d)|((1[012]|0[1-9])[-/.](3[01]|2\d|1\d|0[1-9])[-/.](19|20)\d\d)$
Run Code Online (Sandbox Code Playgroud)
这恰当匹配除了它还包括2/30/2008和2/31/2008.
有人有更好的建议吗?
编辑:我在RegExLib上找到了答案
^((((0[13578])|([13578])|(1[02]))[\/](([1-9])|([0-2][0-9])|(3[01])))|(((0[469])|([469])|(11))[\/](([1-9])|([0-2][0-9])|(30)))|((2|02)[\/](([1-9])|([0-2][0-9]))))[\/]\d{4}$|^\d{4}$
Run Code Online (Sandbox Code Playgroud)
它匹配遵循MM/DD/YYYY格式的所有有效月份.
谢谢大家的帮助.
我正在按照此示例验证日期字符串。
虽然下面的示例评估为true。
var date = new Date('12/21/2019');
console.log(date instanceof Date && !isNaN(date.valueOf()));
Run Code Online (Sandbox Code Playgroud)
这个下面的例子即使是一个不好的日期也算为true。
var date = new Date('02/31/2019');
console.log(date instanceof Date && !isNaN(date.valueOf()));
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
我不太清楚如何验证 javascript 中的日期输入类型。我尝试在互联网上查找,但我找不到任何东西。
我有一个字段要求用户输入其生日。我想在 javascript 中验证它,并对天、月、尤其是年有一定的限制。例如,如果用户输入超过 2016 年(或当前年份),则会出现错误。我不太清楚如何“提取”日期输入类型并控制它的每个元素(日、月、年)。
这是我的 html 的一部分
<form method="POST" action="request.jsp" onsubmit="return validate()">
Date of birth: <input type="date" id="bday" name="bday" value="">
</form>
Run Code Online (Sandbox Code Playgroud)
JavaScript:
var birthday = document.getElementById('bday').value;
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的一切..请帮忙?
我有三个输入,分别是日,月和年.
<div id="birthday">
<div>
<label for="day">Day</label>
<input type="number" id="day" placeholder="Day" name="day" ref="day" />
</div>
<div>
<label for="month">Month</label>
<input type="number" id="month" placeholder="Month" name="month" ref="month" />
</div>
<div>
<label for="year">Year</label>
<input type="number" id="year" placeholder="Year" name="year" ref="year" />
</div>
<span class="clear_both"></span>
</div>
Run Code Online (Sandbox Code Playgroud)
我想通过以下方式验证日期:
年
月
天
我只能查看月份和年份:
let day = this.refs.day.value
let month = this.refs.month.value
let year = this.refs.year.value
let errors = []
if (!((year.length == 4) && (year > 1900 && year < 2016))) {
errors.push("year");
} …Run Code Online (Sandbox Code Playgroud) 如何验证日期?我的意思不是格式,而是逻辑.例如:2月30日不是有效日期.
var date = new Date("2015-02-29T13:02:49.073Z"); // 2015 Feb 29th does not exist
console.log(date.toISOString());
Run Code Online (Sandbox Code Playgroud)
返回2015-03-01T13:02:49.073Z(3月1日).
但我想要一个这个日期(输入)无效的信息.
编辑:在Chrome中测试过.Firefox返回"无效日期".但不是解析.只有在使用日期时(例如toISOString())才会抛出异常.
try
{
var date = new Date("2015-02-29T13:02:49.073Z");
console.log(date.toISOString());
}
catch(e)
{
console.log("error: " + e.message);
}
Run Code Online (Sandbox Code Playgroud)
火狐:
失效日期
铬:
(没有,只是切换到下一个日期.)
摘要:它取决于浏览器.所以,不推荐使用.
我在JavaScript中检测了一个"无效日期"日期实例,用于检查有效日期,我尝试了两个流行的答案.我在IE8中对它们进行了测试 - 不幸的是两者都令人失望.在这里查看http://jsfiddle.net/Lijo/uzSU6/2/
有没有更好的JavaScript代码可以在IE8 + Chrome + Firefox中使用?
注意:令我惊讶的是,它在Firefox中也不能正常工作......
条件
日期格式应为带斜杠的美国日期格式(/)

码
isValidDateCheck2('12/33/2012') ;
isValidDateCheck1('12/12/2012') ;
function isValidDateCheck1(d)
{
alert(Object.prototype.toString.call(d));
if ( Object.prototype.toString.call(d) !== "[object Date]" )
{
alert('Not Valid');
}
if(!isNaN(d.getTime()))
{
alert(d.getTime());
}
}
function isValidDateCheck2(d)
{
var timestamp=Date.parse(d);
alert(timestamp);
if (isNaN(timestamp)==false)
{
var date=new Date(timestamp);
alert(date);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
@mplungjan方法(首次提出)列于http://jsfiddle.net/Lijo/uzSU6/7/.这在IE8中失败了一个场景 - http://jsfiddle.net/Lijo/uzSU6/12/.
我不擅长正则表达.我得到了验证dd/mm/yyyy格式的代码,它也验证了闰年,我试图修改以使其适用于mm/dd/yyyy,但它们都失败了.
有人可以改变它来验证mm/dd/yyyy格式吗?
正则表达式:
^(((0 [1-9] | [12]\d | 3 [01])/(0 [13578] | 1 [02])/((19 | [2-9]\d)\ d { 2}))|((0 [1-9] | [12]\d | 30)/(0 [13456789] | 1 [012])/((19 | [2-9]\d)\ d { 2}))|((0 [1-9] | 1\d | 2 [0-8])/ 02 /((19 | [2-9]\d)\ d {2}))|(29/02 /((1 [6-9] | [2-9]\d)(0 [48] | [2468] [048] | [13579] [26])|((16 | [2468] [048 ] | [3579] [26]),00))))$
回答大家好 ,感谢大家的帮助,最后再解析正则表达式,我得到了我的答案来验证mm/dd/yyyy格式
正则表达式:
/ ^(((0 [13578] | 1 [02])/(0 [1-9] | [12]\d | 3 [01])/((19 | [2-9]\d)\ …
我试图用dd/mm/yyyy格式匹配从1900年到2017年的日期
^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$
Run Code Online (Sandbox Code Playgroud)
正则表达式,但我观察到这个正则表达式在16/06/2008和21/02/2008等日期失败.
为了确保这个正则表达式的所有部分都正常工作,我尝试了它的所有三个部分 ^(0[1-9]|1[0-9]|2[0-9]|3[01])$,^(0[1-9]|1[012])$并且^(19[0-9]{2}|20[0-1][0-7])$在几个月和几年的不同日子里,但我发现这些工作正常但是当我运行它时我得到了同样意想不到的日期的结果就像16/06/2008.
另外我想告诉你我在javascript中使用这个正则表达式:
var patt = new RegExp("^(0[1-9]|1[0-9]|2[0-9]|3[01])/(0[1-9]|1[012])/(19[0-9]{2}|20[0-1][0-7])$");
var res = patt.exec(datestring);
Run Code Online (Sandbox Code Playgroud)
对于像16/06/2008res的日期评估为null.
请让我知道我哪里出错了?为了解决这个问题,我已经完成了一些正则表达式教程和之前提出的问题,但我没有找到任何可以告诉我为什么这个正则表达式在某些特定日期失败的相关答案.请帮忙.
javascript ×9
date ×7
regex ×3
validation ×2
datetime ×1
forms ×1
html ×1
jquery ×1
momentjs ×1