检查日期是不是有效

     2023-02-22     71

关键词:

【中文标题】检查日期是不是有效【英文标题】:Check if date is a valid one检查日期是否有效 【发布时间】:2017-02-28 15:25:18 【问题描述】:

以下是场景:

我有一个String 日期和不同的日期格式。例如: 日期:2016-10-19 日期格式:“DD-MM-YYYY”。

我需要检查这个日期是否有效。

我已经尝试过以下事情

var d = moment("2016-10-19",dateFormat);

d.isValid() 每次都返回false。 Moment.js 不解析给定格式的日期吗?

然后我尝试先将日期格式化为DD-MM-YYYY,然后将其传递给 Moment.js:

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

现在date.isValid() 给了我想要的结果,但是这里 Moment.js 日期对象被创建了两次。我怎样才能避免这种情况?有没有更好的解决方案?

仅供参考,我不允许更改dateFormat

【问题讨论】:

不允许更改dateFormat的值吗?在这种情况下,您将不得不更改输入的格式,因为 2016-10-19 是 YYYY-MM-DD,而不是 DD-MM-YYYY。你可以改变什么? 输入来自日期选择器。也不能改变:( 请问为什么不允许更改 dateFormat 变量? var d = moment("19-10-2016", "DD-MM-YYYY");就我而言,会解决你的问题 真的不能说。但我无法控制更改该值。 How to test a string is valid date or not using moment?的可能重复 【参考方案1】:

能够找到解决方案。 由于我得到的日期是 ISO 格式,因此只提供日期到时刻将对其进行验证,无需传递 dateFormat。

var date = moment("2016-10-19");

然后date.isValid() 给出想要的结果。

【讨论】:

有谁知道现在的首选方法是什么?此方法现在抛出以下“弃用警告”:时刻构造回退到 js 日期。这是不鼓励的,将在即将发布的主要版本中删除。更多信息请参考github.com/moment/moment/issues/1407。 提醒一下,这并不总是有效:var a = moment('12345'); a.isValid() // is true 这会失败,因为如果无法解析日期,moment 将退回到默认日期对象。并且默认日期对象将始终返回一个日期(只是不是您想要的。) 需要添加moment('02').isValid() === true,所以你可能要小心 还有moment('abcde 1').isValid() === true 这是一个错误的答案,因为无论我传入什么字符串,我总是得到正确【参考方案2】:

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

您应该在调用 moment 时添加第三个参数,以强制执行严格的解析。这是 moment 文档的相关部分 http://momentjs.com/docs/#/parsing/string-format/ 它在该部分的末尾附近。

【讨论】:

这没有效果。 这个答案应该是正确的答案........@Begueradj 这有效果,尝试使用不同的值,有时正确有时错误 你可以阅读关于严格解析here 这会让你输入 0000 作为一年【参考方案3】:

我刚刚发现了一个非常糟糕的案例。

moment('Decimal128', 'YYYY-MM-DD').isValid() // true

【讨论】:

moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false。使用严格模式:) momentjs.com/guides/#/parsing/strict-mode 严格模式有效。奇怪的是,这必须是严格的。【参考方案4】:

给你:Working Fidddle

$(function()
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
);

【讨论】:

就像我说的 dateFormat 是 'DD-MM-YYYY' 并且我不能更改它。 哦,我明白了。让我看看。 这里2016-10-19是否允许更改日期字符串? 不。那来自日期选择器 你不能在它来自datepicker之后,在你输入到var d = moment("2016-10-19",dateFormat);之前修改它吗?【参考方案5】:

当日期和日期格式不同时,如何使用 Moment 检查字符串是否为有效日期

抱歉,此线程上的任何给定解决方案是否真正回答了所提出的问题?

我有一个字符串日期和一个不同的日期格式。前任。: 日期:2016-10-19 日期格式:“DD-MM-YYYY”。 我需要检查这个日期是否有效。

以下对我有用...

const date = '2016-10-19';
const dateFormat = 'DD-MM-YYYY';
const toDateFormat = moment(new Date(date)).format(dateFormat);
moment(toDateFormat, dateFormat, true).isValid();

// Note I: `new Date()` circumvents the warning that
//   Moment throws (https://momentjs.com/guides/#/warnings/js-date/),
//   but may not be optimal.

// Note II: passing `true` as third argument to `moment()` enables strict-mode
//   https://momentjs.com/guides/#/parsing/strict-mode/

但老实说,不明白为什么moment.isDate()(as documented) 只接受一个对象。在我看来也应该支持一个字符串。

【讨论】:

如果我们暂时将 true 作为第三个参数传递,它会检查确切的日期格式。【参考方案6】:

我使用 moment 和 new Date 来处理 undefined 数据值的情况:

const date = moment(new Date("2016-10-19"));

因为:moment(undefined).isValid() == true

哪里是更好的方法:moment(new Date(undefined)).isValid() == false

【讨论】:

【参考方案7】:
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())

 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false

【讨论】:

您能否为您的答案添加一些解释?这对已经存在和接受的答案有什么附加价值?【参考方案8】:

如果日期有效,则getTime() 将始终等于其自身。

var date = new Date('2019-12-12');
if(date.getTime() - date.getTime() === 0) 
    console.log('Date is valid');
 else 
    console.log('Date is invalid');

【讨论】:

【参考方案9】:

我用的是moment.js

let value = '19-05-1994';
let check = moment(value,'DD-MM-YYYY', true).isValid();
        console.log(check) //returns true
        return check

【讨论】:

【参考方案10】:

你可以使用

var d = moment("2016-10-19",dateFormat);
if(!isNaN(d)) 
  // d is a valid date.

【讨论】:

【参考方案11】:

试试这个。这不是很好,但只要输入是来自日期选择器的恒定格式,它就可以工作。

在这个例子中是 badDate 来自你的选择器

https://jsfiddle.net/xs8tvox9/

var dateFormat = 'DD-MM-YYYY'
var badDate = "2016-10-19";

var splittedDate = badDate.split('-');

if (splittedDate.length == 3) 
  var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat);
  alert(d.isValid())
 else 
  //incorrectFormat

【讨论】:

请不要这样做。

如何检查字符串是不是为有效日期

】如何检查字符串是不是为有效日期【英文标题】:Howtocheckifastringisavaliddate如何检查字符串是否为有效日期【发布时间】:2011-02-2616:52:21【问题描述】:我有一个字符串:"31-02-2010"并想检查它是否是有效日期。最好的方... 查看详情

在javascript中检查日期是不是有效[重复]

】在javascript中检查日期是不是有效[重复]【英文标题】:Checkingifadateisvalidinjavascript[duplicate]在javascript中检查日期是否有效[重复]【发布时间】:2012-05-2207:34:01【问题描述】:可能重复:Detectingan“invaliddate”DateinstanceinJavaScriptjavas... 查看详情

检查日期是不是对选定的月份有效 Django 表单

】检查日期是不是对选定的月份有效Django表单【英文标题】:CheckifdayisvalidforselectedmonthDjangoforms检查日期是否对选定的月份有效Django表单【发布时间】:2017-07-2719:47:24【问题描述】:我有一个表单,用户输入一天(1到31之间的数... 查看详情

扑。如何检查自动续订订阅是不是仍然有效

】扑。如何检查自动续订订阅是不是仍然有效【英文标题】:Flutter.Howtocheckthatautorenewalsubscriptionisstillvalid扑。如何检查自动续订订阅是否仍然有效【发布时间】:2019-07-2113:23:54【问题描述】:我的应用有1个月的自动续订订阅。... 查看详情

检查字符串是不是为日期的函数

】检查字符串是不是为日期的函数【英文标题】:Functiontocheckifastringisadate检查字符串是否为日期的函数【发布时间】:2012-06-1706:57:10【问题描述】:我正在尝试使用PHP编写一个函数来确定字符串是否为日期/时间。基本上一个有... 查看详情

java中使用正则检查有效日期

本文我们学习了使用正则表达式从格式、范围和月份长度等规则匹配公历日期。本文我们学习了使用正则表达式从格式、范围和月份长度等规则匹配公历日期。 查看详情

java中检查字符串是否是有效日期

讨论在Java中检查一个字符串是否包含有效日期的各种方法,包括Java8之前与Java8之后及ApacheCommonsValidator的解决方案。讨论在Java中检查一个字符串是否包含有效日期的各种方法,包括Java8之前与Java8之后及ApacheCommonsValidator的解决方... 查看详情

java示例代码_检查日期字符串的有效性

java示例代码_检查日期字符串的有效性 查看详情

检查网址是不是有效[重复]

】检查网址是不是有效[重复]【英文标题】:Checkifurlisvalidornot[duplicate]检查网址是否有效[重复]【发布时间】:2013-07-1713:53:06【问题描述】:我试图检查url是否有效。7,8的检查返回错误的输出。alert(\'1:\'+learnRegExp(\'http://www.google-co... 查看详情

如何验证输入是不是是javascript中的有效日期[重复]

】如何验证输入是不是是javascript中的有效日期[重复]【英文标题】:Howtovalidateiftheinputisavaliddateinjavascript[duplicate]如何验证输入是否是javascript中的有效日期[重复]【发布时间】:2017-12-2703:06:22【问题描述】:我想验证输入到函数... 查看详情

正确确定日期字符串是不是是该格式的有效日期

】正确确定日期字符串是不是是该格式的有效日期【英文标题】:Correctlydetermineifdatestringisavaliddateinthatformat正确确定日期字符串是否是该格式的有效日期【发布时间】:2013-10-1618:34:11【问题描述】:我从API接收日期字符串,它的... 查看详情

如何检查网址是不是有效[重复]

】如何检查网址是不是有效[重复]【英文标题】:Howtocheckifaurlisvalidornot[duplicate]如何检查网址是否有效[重复]【发布时间】:2012-09-0509:12:08【问题描述】:我正在尝试使用.NET从有效网址中过滤掉无效网址。我正在为此使用Uri.TryCre... 查看详情

检查比特币地址是不是有效?

】检查比特币地址是不是有效?【英文标题】:Checkifbitcoinaddressisvalid?检查比特币地址是否有效?【发布时间】:2014-04-0308:28:45【问题描述】:我想知道有没有办法检查比特币地址是否有效?我正在使用ruby​​onrails。或许我可... 查看详情

如何检查电子邮件是不是有效? [复制]

】如何检查电子邮件是不是有效?[复制]【英文标题】:HowtoCheckEmailisvalidateornot?[duplicate]如何检查电子邮件是否有效?[复制]【发布时间】:2013-04-1820:28:00【问题描述】:如何检查电子邮件是否有效?(例如:-abc@yahoo.com->好的a... 查看详情

JavaScript 检查时区名称是不是有效

】JavaScript检查时区名称是不是有效【英文标题】:JavaScriptcheckiftimezonenamevalidornotJavaScript检查时区名称是否有效【发布时间】:2017-10-2206:39:41【问题描述】:有没有办法在不使用外部库的情况下检查时区名称在JavaScript中是否有效... 查看详情

使用 OnClientClick 检查 ValidationSummary 是不是有效

】使用OnClientClick检查ValidationSummary是不是有效【英文标题】:CheckifValidationSummaryisValidusingOnClientClick使用OnClientClick检查ValidationSummary是否有效【发布时间】:2010-09-2917:17:12【问题描述】:有没有办法在按钮的OnClientClick事件中使用J... 查看详情

使用 jQuery 检查链接是不是仍然有效

】使用jQuery检查链接是不是仍然有效【英文标题】:UsejQuerytocheckiflinksstillwork使用jQuery检查链接是否仍然有效【发布时间】:2012-10-2921:19:16【问题描述】:我创建了一个快速功能,使用AJAX检查页面上的每个链接,看看它们是否仍... 查看详情

如何检查 DST(夏令时)是不是有效,如果有效,偏移量?

】如何检查DST(夏令时)是不是有效,如果有效,偏移量?【英文标题】:HowtocheckifDST(DaylightSavingTime)isineffect,andifso,theoffset?如何检查DST(夏令时)是否有效,如果有效,偏移量?【发布时间】:2012-08-0622:41:11【问题描述】:这... 查看详情