JavaScript 日期格式检查

网页开发中使用者进行输入资料。判断使用者输入日期格式是否为 YYYY/MM/DD JavaScript 日期格式检查表单日期格式,用来判断使用者输入的日期格式是否符合预期的方法。最好在客户端 JavaScript 送出资料时验证日期值是否正确,使用正则表达式 Regular Expression 来定义规则。正则表达式来检查字串模式的语法,可以用来寻找检索 match 匹配、search 搜寻或 test, exec 检测使用者输入的字串是否符合该规则。

JavaScript

但是这样只是检验其最大限制值,必须再进一步解析大月、小月、闺月的问题,否则会出现不合法的日期。

function dateValidationCheck(str) {
  let re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$");
  let strDataValue;
  let infoValidation = true;
  if ((strDataValue = re.exec(str)) != null) {
    let i;
    i = parseFloat(strDataValue[1]);
    if (i <= 0 || i > 9999) {
      infoValidation = false;
    }
    i = parseFloat(strDataValue[2]);
    if (i <= 0 || i > 12) {
      infoValidation = false;
    }
    i = parseFloat(strDataValue[3]);
    if (i <= 0 || i > 31) {
      infoValidation = false;
    }
  } else {
    infoValidation = false;
  }
  if (!infoValidation) {
    alert("请检查输入 YYYY/MM/DD 日期格式");
  }
  return infoValidation;
}

Html

<form method="post" name="dateCheckFrom"
      onsubmit="return dateValidationCheck(this.date.value);">
<p>请依格式输入日期 YYYY/MM/DD:</p>
<input type="text" name="date" size="15" />
<input type="submit" value="送出资料" />
</form>



判断检验日期是否正确

使用 Date.parse 但是解读字串传回其总毫秒数,使用 Date.parse 由于浏览器之间可能的不同与差异问题。

Date.parse("2019-02-29") // Firefox NaN
Date.parse("2019-02-29") // Chrome 1551398400000
Date.parse("2019-02-29") // Edge   1551398400000
Date.parse("2019-02-29") // Opera  1551398400000

尝试将日期字串使用 new Date() 但需要将结果以 getFullYear(), getMonth() 及 getDate() 提取,再次比照原输入日期字串,会有些麻烦但是可以得到浏览器之间的一致。

new Date("2019/02/29").toLocaleString();
// '2019/3/1 上午12:00:00'

💡 其中 toLocaleString() 回传依「电脑系统」的地区设定输出的日期时间字串,只是用中文比较易读。

let oDate = new Date("2019-02-29")
// Date Fri Mar 01 2019 00:00:00 GMT+0800 (台北标准时间)

如此其输入日期字串的月份及日、就是 false 不一样、需要依使用者输入之栏位方式来拆解判断。

let cYear = oDate.getFullYear();
let cMonth = oDate.getMonth() + 1;
let cDate = oDate.getDate();

输入日期字串 iYear, iMonth, iDate

let result = (iYear == cYear) && (iMonth == cMonth) && (iDate == cDate);
年   月  



功能 : 判断 v 是否是整数

如果输入日期以年、月、日、分别输入或许会需要判断是否为数值。

function IsInt(n) {
  let check = n.match(/^[0-9]+$/);
  if (check == null) {
    return false;
  } else {
    return true;
  }
}

使用函式 IsNumeric 判断数值

let IsNumeric = function (input) {
  return (input - 0) == input && input.length > 0;
}
IsNumeric("-1") = true
IsNumeric("-1.5") = true
IsNumeric("0") = true
IsNumeric(".38") = true
IsNumeric("1120") = true
IsNumeric("1e+3") = true
IsNumeric("0x89f") = true
IsNumeric("2,600") = false
IsNumeric("Numeric") = false
IsNumeric("") = false