gpt4 book ai didi

javascript - 如何在 javascript 中安全地解析日期 HTTP header

转载 作者:可可西里 更新时间:2023-11-01 02:23:40 32 4
gpt4 key购买 nike

如果我使用 Date.parse(),我“几乎可以保证”能够解析我程序中的内容吗?

Mozilla's entry for Date.parse ,他们写道:

Given a string representing a time, parse() returns the time value. It accepts the RFC2822 / IETF date syntax (RFC2822 Section 3.3), e.g. "Mon, 25 Dec 1995 13:30:00 GMT".

我自己的服务器返回 Sun, 24 May 2015 05:37:13 GMT

问题是,Wikipedia tells me that the Date header follows the RFC 7131 .现在,RFC 7231虽然他们似乎在说同样的话(尽管 7231 更广泛),但我想知道...

如果我使用 Date.parse(),我“几乎可以保证”能够解析我程序中的内容吗?我很高兴地假设服务器没有在时间真空中运行。

最佳答案

TL;DR 如果您要找回 new or old RFC 7231兼容的字符串,它将在大多数现代浏览器上解析,因为它们都有非常相似且疯狂灵活的解析规则:

new Date('Sun, 24 May 2015 05:37:13 GMT')
new Date('2015 GMT 24 05:37:13 May')
// => Sun May 24 2015 01:37:13 GMT-0400 (EDT)

如果您需要 100% 保证任何兼容的 ECMAScript 实现,您将需要使用您的应用程序代码将时间戳转换为 ISO 8601 format :YYYY-MM-DDTHH:mm:ss.sssZ

请记住,时区可能会根据用户的位置而变化。


ECMAScript 仅指定以下格式的日期:

ECMAScript defines a string interchange format for date-times basedupon a simplification of the ISO 8601 Extended Format. The format isas follows: YYYY-MM-DDTHH:mm:ss.sssZ

来源:http://es5.github.io/#x15.9.1.15

关于Date.parse:

If the String does not conform to that format the function may fallback to any implementation-specific heuristics orimplementation-specific date formats.

来源:http://es5.github.io/#x15.9.4.2

对于现代浏览器实现,以下规则通常适用:

  • month/day/year, month-day-year for short dates
  • 月份和日期可以是 1 位或 2 位数字
  • 只有两位数的年份必须 >= 70
  • 对于拼写的日期,年月日可以在任何地方以任何顺序排列(稍后您会明白我的意思):2000 年 1 月 1 日2000 年 1 月 1 日, 2000 年 1 月 1 日
  • 月份可以缩写为三个字符(我相信 IE 允许两个字符)
  • JavaScript 将覆盖无效的星期几
  • 时分秒以冒号分隔:'10:20:30'、'10:20'、'10:'有效
  • 您可以在任何地方指定“AM”和“PM”,但如果您输入错误或多余,您将得到 NaN 或无效日期错误
  • 您可以在任何地方指定时区字符串(例如“EST”、“EDT”、“GMT”)

“任何地方”真正意味着“任何地方”:您可以将组件中的废话混为一谈。下面的疯狂工作,例如......

new Date('PM Jan EST 2015 1 10:00')
new Date('2015 1 10:00 Jan EST PM')
// => Thu Jan 01 2015 10:00:00 GMT-0500 (EST)

...这就是为什么您几乎可以保证解析这些日期。

来源:

关于javascript - 如何在 javascript 中安全地解析日期 HTTP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420816/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com