【问题标题】:How to evaluate valid date strings in IE11 [duplicate]如何评估 IE11 中的有效日期字符串 [重复]
【发布时间】:2020-05-27 19:26:31
【问题描述】:

IE11 的Date.parse 函数在大量无效日期上“成功”。

在不使用第三方库的情况下,验证YYYY/MM/DD 格式的字符串是否包含实际的“合法”日期(例如“2020/02/29”成功,但“2019/02”的正确方法是什么? /29" 失败,等等)在 javascript 中?

Examples from IE11 console:

new Date(Date.parse('2020/05/99')     // Fri Aug 07 2020
new Date(Date.parse('2020/05/100')    // Sat Aug 08 20202
new Date(Date.parse('2020/05/1000')   // Wed Jan 25 2023
new Date(Date.parse('2020/69/800000') // Fri Dec 29 4215
new Date(Date.parse('2020/69/1000')   // Sat May 27 2028
new Date(Date.parse('2020/70/1000')   // Invalid Date

【问题讨论】:

  • 请不要分享代码/文本的截图。始终复制粘贴,以便为要回答您的问题的人提供更好的可读性:)
  • 听起来不像是个聪明人,但您的选择是:a)使用库或 b)自己编写。 Date.parse(....) 将接受多种日期格式——不同的浏览器将支持不同的格式。
  • 它通过不抛出错误来“成功”。并不意味着它是正确的 - 当您解析非标准日期字符串时,您可以获得任何非标准行为。我不建议以任何形式或形式依赖它。 a) 使用日期解析库或 b) 使用标准日期字符串。

标签: javascript date validation internet-explorer-11


【解决方案1】:

感谢大家的反馈。这是针对对第三方库有非常严格限制的应用程序,所以我希望有一个内置的 javascript 函数可以支持这一点,但事实并非如此。

除非有人知道更好的方法,否则我将使用 w3resource.com 中的示例代码手动评估字符串 - https://www.w3resource.com/javascript/form/javascript-date-validation.php

再次感谢, 迈克尔

【讨论】:

  • 附加信息应包含在 OP 中,这不是答案。
【解决方案2】:

你可以这样写:

function parseDate(dateString) {
  var dateParts = dateString.split("/"),
      years = dateParts[0],
      months = dateParts[1],
      days = dateParts[2]

  // sanity check date parts
  if (days > 31) return "Invalid Date - Days"
  if (months > 12) return "Invalid Date - Months"

  var myDate = new Date(years, months, days)

  return myDate
}

堆栈片段中的演示

function parseDate(dateString) {
  var dateParts = dateString.split("/"),
      years = dateParts[0],
      months = dateParts[1],
      days = dateParts[2]
  
  // sanity check date parts
  if (days > 31) return "Invalid Date - Days"
  if (months > 12) return "Invalid Date - Months"
  
  var myDate = new Date(years, months, days)
  
  return myDate
}

console.log('2020/05/15: ', parseDate('2020/05/15'))
console.log('2020/05/99: ', parseDate('2020/05/99'))
console.log('2020/05/100: ', parseDate('2020/05/100'))
console.log('2020/70/1000: ', parseDate('2020/70/1000'))

【讨论】:

  • 感谢@KyleMit 修复我的帖子格式!
猜你喜欢
  • 2019-04-22
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多