【问题标题】:Date validation for months in javascriptjavascript中几个月的日期验证
【发布时间】:2023-03-09 00:59:01
【问题描述】:

我指的是这个link,由于我没有 50 名声望,我不允许在答案中发表评论,所以发布这个问题。我没有得到您可以看到从月份中减去一个月的声明。这可能很简单,但有人可以澄清一下吗?

var m = 匹配1 - 1; ?

function isValidDate(date)
{
    var matches = /^(\d{2})[-\/](\d{2})[-\/](\d{4})$/.exec(date);
    if (matches == null) return false;
    var d = matches[2];
    var m = matches[1] - 1;
    var y = matches[3];
    var composedDate = new Date(y, m, d);
    return composedDate.getDate() == d &&
            composedDate.getMonth() == m &&
            composedDate.getFullYear() == y;
}

【问题讨论】:

标签: javascript validation date


【解决方案1】:

var m = 匹配 1 - 1; ?

months 索引从 0 开始。

因此,虽然您认为 Jan 是 1,但实际上是 0,而实际上是 date.getMonth()

这就是为什么当您从日期字符串中获取1 时,需要先将其设为0,然后再将其设置为日期对象。

【讨论】:

  • 好的。它不适用于日期吗?
  • @Ashish 不,日期和年份值保持原样。
  • 好的。谢谢。现在明白了。
【解决方案2】:

从问题的本质来看,验证功能做得太过分了。只需检查月份,因为如果日期或月份超出范围,则生成日期的月份将发生变化。

另外正则表达式可以大大简化,考虑(假设输入是美国特有的m/d/y格式):

/* Validate a date string in US m/d/y format
** @param {string} s - string to parse
**                     separator can be any non–digit character (.-/ are common)
**                     leading zeros on values are optional
** @returns {boolean} true if string is a valid date, false otherwise
*/
function validateMDY(s) {
  var b = s.split(/\D/);
  var d = new Date(b[2],--b[0],b[1]);
  return b[0] == d.getMonth();
}

var testData = ['2/29/2016',   // Valid - leap year
                '2/29/2015',   // Invalid - day out of range
                '13/4/2016',   // Invalid - month out of range
                '13/40/2016',  // Invalid - month and day out of range
                '02/02/2017']; // Valid

document.write(testData.map(function(a) {
  return a + ': ' + validateMDY(a);
}).join('<br>'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多