【问题标题】:Check date in JavaScript在 JavaScript 中检查日期
【发布时间】:2011-07-23 12:12:29
【问题描述】:

我通过用户输入获得三个变量,它们包含日期的年份、月份和日期。我已经检查过月份变量是否在 1-12 之间等等。

现在我想检查它是否是真实日期,而不是像 31-06-2011 这样不存在的日期。

我的第一个想法是创建一个新的 Date 实例:

var year = 2011;
var month = 5; // five because the months start with 0 in JavaScript - June
var day = 31;
var myDate = new Date(2011,5,31);
console.log(myDate);

但 myDate 不会返回 false,因为它不是有效日期。相反,它返回“Fri Jul 01 2011 [...]”。

有什么方法可以检查无效日期吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow,dotweb!请不要在标题中添加标签,谢谢!
  • 标签属于标签,not in the title

标签: javascript date


【解决方案1】:

试试这个:

if ((myDate.getMonth()+1!=month)||(myDate.getDate()!=day)||(myDate.getFullYear()!=year))
    alert("Date Invalid.");

【讨论】:

  • 您只需要检查两个组件,但三个都没有坏处。 :-)
【解决方案2】:
if ((myDate.getDate() != day) || 
    (myDate.getMonth() != month - 1) || 
    (myDate.getFullYear() != year))
{
    return false;
}

JavaScript 只是将在Date 构造函数monthyearday 等中输入的内容转换为简单的 int 值(毫秒),然后将其格式化为字符串格式。你可以创建new Date(2011, 100, 100),一切都会好的:)

【讨论】:

    【解决方案3】:

    你可以做你现在做的事情并构造一个新的 Date 对象,然后检查 myDate.getFullYear()、myDate.getMonth()、myDate.getDate() 的值,以确保这些值与输入匹配价值观。请记住,getMonth() 和 getDate() 的索引为 0,因此 1 月是第 0 个月,12 月是第 11 个月。

    这是一个例子:

    function isValidDate(year, month, day) {
        var d = new Date(year, month, day);
    
        return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day;
    }
    
    console.log(isValidDate(2011,5,31));
    console.log(isValidDate(2011,5,30));
    

    【讨论】:

      【解决方案4】:

      这是一个老问题,但是为了帮助我和我之后的其他人,这是来自以下网页的 php checkdate 解决方案:

      https://locutus.io/php/datetime/checkdate/

      function checkdate (m, d, y) {
          return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0))
          .getDate()
      }
      

      【讨论】:

        【解决方案5】:

        我认为这是正确的做法:

        function isValidDate(year, month, day) {
          var d = new Date(year, month, day)
          if (month == 12) {
            year = parseInt(year) * 1 + 1 * 1
            month = 0
          }
          day = parseInt(day)
          month = parseInt(month)
          year = parseInt(year)
          if (month === 2 && day > 29) {
            return false
          }
          return (
            d.getFullYear() === year && d.getMonth() === month && d.getDate() === day
          )
        }
        

        【讨论】:

        • 嗯,这个问题半年多前就已经回答了!无论如何,谢谢。
        猜你喜欢
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多