相关疑难解决方法(0)

在JavaScript中检测"无效日期"日期实例

我想告诉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函数的任何想法?

  • Ash建议Date.parse用于解析日期字符串,它提供了一种检查日期字符串是否有效的权威方法.
  • 如果可能的话,我希望我的API接受一个Date实例,并且能够检查/断言它是否有效.Borgar的解决方案就是这样做的,但我需要跨浏览器进行测试.我也想知道是否有更优雅的方式.
  • Ash让我觉得根本没有我的API接受Date实例,这最容易验证.
  • Borgar建议测试一个Date实例,然后测试它Date的时间值.如果日期无效,则时间值为NaN.我用ECMA-262检查了这个行为是标准的,这正是我正在寻找的.

javascript date

1381
推荐指数
24
解决办法
75万
查看次数

检查日期是否有效

以下是场景:

我有一个不同的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.

javascript datetime date momentjs

104
推荐指数
8
解决办法
13万
查看次数

正则表达式匹配有效日期

我正在尝试编写一个验证日期的正则表达式.正则表达式需要匹配以下内容

  • M/d/YYYY
  • MM/DD/YYYY
  • 单个数字月份可以从前导零开始(例如:03/12/2008)
  • 单位数天可以从前导零开始(例如:2008年3月2日)
  • 不能包括2月30日或2月31日(例如:2008年2月31日)

到目前为止我有

^(([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格式的所有有效月份.

谢谢大家的帮助.

regex date

63
推荐指数
5
解决办法
17万
查看次数

用Java验证错误日期

我正在按照此示例验证日期字符串。

虽然下面的示例评估为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 date

7
推荐指数
1
解决办法
244
查看次数

javascript 中的日期输入类型验证?

我不太清楚如何验证 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)

这就是我所拥有的一切..请帮忙?

html javascript forms validation

6
推荐指数
1
解决办法
5万
查看次数

按日,月和年检查有效日期

我有三个输入,分别是日,月和年.

<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)

我想通过以下方式验证日期:

  1. 年

    • 年份应该有4个字符(即YYYY)
    • 年份应在1900年至今年之间.
  2. 月

    • 月份应在1到12之间
  3. 天

    • 如果年份是闰年,月份是2月(2月),那么日期应该在1到29之间
    • 如果年份不是闰年,则根据月份,日期应在1到31或1到30之间

我只能查看月份和年份:

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)

javascript date

6
推荐指数
1
解决办法
2125
查看次数

Javascript日期允许无效数据(例如2月30日)

如何验证日期?我的意思不是格式,而是逻辑.例如: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)

火狐:

失效日期

铬:

(没有,只是切换到下一个日期.)

摘要:它取决于浏览器.所以,不推荐使用.

jsfiddle的例子

javascript date

5
推荐指数
2
解决办法
924
查看次数

Javascript有效日期检查在IE8(和Firefox)中不起作用

我在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/.

javascript jquery

4
推荐指数
1
解决办法
3786
查看次数

javascript - 以mm/dd/yyyy格式验证日期的正则表达式

我不擅长正则表达.我得到了验证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)\ …

javascript regex validation date date-conversion

3
推荐指数
1
解决办法
3万
查看次数

为什么这个正则表达式"^(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,21/02/2008这样的日期失败了.?

我试图用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 regex

1
推荐指数
1
解决办法
118
查看次数