如何将 ISO 8601 格式的日期值转换为 JavaScript 中的日期对象?

2024-04-14

我一直在尝试将日期值转换为更易读的格式。为此,我尝试使用 JavaScript 解析日期Date.parse()方法。然而,这不适用于输入(例如:"2007-09-21T14:15:34.058-07:00") 我有。最终目标是输出一个日期字符串,例如"January 30th, 2008 @ 2:15PM".

有任何想法吗?


你可能应该使用datejs http://www.datejs.com/ that f3lix https://stackoverflow.com/users/60617/推荐,但是我很无聊,并拼凑了一个小对象,它完全符合您的要求:

2012 年 9 月 25 日:清理代码,允许非扩展格式,例如 20120925T164740+0200

2011 年 12 月 1 日:修复了月份字符串中的错误。八月失踪了

var ISODate = {
  convert :
    function (input){
      if (!(typeof input === "string")) throw "ISODate, convert: input must be a string";
      var d = input.match(/^(\d{4})-?(\d{2})-?(\d{2})[T ](\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|(?:([+-])(\d{2}):?(\d{2})))$/i);
      if (!d) throw "ISODate, convert: Illegal format";
      return new Date(
        Date.UTC(
          d[1], d[2]-1, d[3],
          d[4], d[5], d[6], d[7] || 0 % 1 * 1000 | 0
        ) + (
          d[8].toUpperCase() === "Z" ? 0 :
            (d[10]*3600 + d[11]*60) * (d[9] === "-" ? 1000 : -1000)
        )
      );
    },
  format :
    function(date, utc){
      if (typeof date === "string") date = this.convert(date);
      if (!(date instanceof Date)) throw "ISODate, format: t is not a date object";

      var t={'FullYear':0, 'Month':0, 'Date':0, 'Hours':0, 'Minutes':0, 'Seconds':0};
      for (var key in t) {
        if (t.hasOwnProperty(key)) t[key] = date["get" +(utc ? "UTC" :"") + key]()
      }

      return this.month[t.Month]
        + " "
        + this.ordinal(t.Date)
        + ", "
        + t.FullYear
        + " @ "
        + this.clock12(t.Hours,t.Minutes);
      },
  month:
    [
      "January", "February", "March", "April", "May", "June",
      "July", "August", "September", "October", "November", "December"
    ],
  ordinal:
    function(n) {
      return n+(
        [
          "th", "st", "nd", "rd"
        ][
          (( n % 100 / 10) | 0) === 1 ? 0 : n % 10 < 4 ? n % 10 : 0
        ]
      );
  },
  clock12:
    function(h24, m, s){
      h24%=24;
      var h12 = (h24 % 12) || 12;
      return h12 + ":" +
        (m < 10 ? "0" + m : m) +
        (isFinite(s) ? ":" + (s < 10 ? "0" + s : s ) : "") +
        (h24 < 12 ? "AM" : "PM");
      }
};

Example:

//Shows the date in the users timezone:
alert(ISODate.format("2007-09-21T14:15:34.058-07:00"));

//Show the date in UTC (Timezone Z, 00:00)
alert(ISODate.format("2007-09-21T14:15:34.058-07:00",true));

解释:

convert接受一个字符串作为输入,如果成功则返回一个日期对象,如果失败则抛出异常。该字符串必须采用以下格式之一:

  • YYYY-MM-DDThh:mm:ss.sZ
  • YYYY-MM-DDThh:mm:ss.sXaa:bb

Where:

  • YYYY 是 4 位整数的年份
  • MM 是 2 位整数的月份
  • DD 是 2 位整数的月份日期
  • T 是字符 T 或空格 (\x20)
  • hh 是 24 小时格式的小时,为 2 位整数
  • mm 是 2 位整数形式的分钟
  • ss.s 是第二个,可以是 2 位整数,也可以是 2 位浮点数,后跟句点,后跟一位或多位数字。
  • Z是字符Z(表示时区Z,UTC+00:00)
  • X 是 UTC 时间偏移的加号 (+) 或减号 (-)
  • aa 是 UTC 的时间偏移小时,为 2 位整数
  • bb 是 ITC 的时间偏移分钟数,为 2 位整数

format接受上述格式的字符串或日期对象并返回格式如下的字符串:

  • M D、Y @ h:mm

在哪里 - M 是月份的英文全称 - D 是带有数字顺序后缀的月份日期(1-2 位数字) - Y 是年份(1 位或多位数字) - h 是 12 小时格式的小时(1-2 位数字) - m 是分钟(2 位数字)

month是一个包含月份名称的数组

ordinal是一个以数字作为输入并返回带有英文序数后缀的数字的函数。

clock12是一个函数,它将 24 小时格式的小时、分钟和秒转换为美国 12 小时格式的字符串。这seconds是可选的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 ISO 8601 格式的日期值转换为 JavaScript 中的日期对象? 的相关文章

  • 自动调整Google网站嵌入代码的高度(html)

    我正在使用 Google 协作平台嵌入 HTML 代码 将代码粘贴到 从网络嵌入 窗口中 输出的长度是可变的 我希望有一种方法可以动态调整父级的高度iframeGoogle 协作平台用于托管我的 HTML 我知道我可以使用 Google 协
  • 如何在 Firefox 控制台中访问附加内容脚本?

    我为 Firefox 和 Chrome 开发了一个插件 它有内容脚本 我想在浏览器选项卡的控制台中访问它们 在 Firefox 上网页控制台 https developer mozilla org en US docs Tools Web
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 使用 javascript 更改 div 颜色

    div style height 20px width 100 background color 000000 div br
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • window.onbeforeunload 在 Android Chrome 上不会触发 [alt.解决方案?]

    我开发了一个简单的聊天应用程序 我正在使用 window onbeforeunload当有人关闭选项卡 浏览器时 基本上是当用户离开房间时 通知其他用户 这是我的代码 scope onExit function scope chatstat
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 如何检测元素内容何时发生变化

    我正在寻找一种方法来监视元素内动态填充 无页面重新加载 内容 以便我可以将类添加到另一个元素 到目前为止我有这个 HTML div class message container div class messages error span
  • 如何打开弹出窗口并用父窗口中的数据填充它?

    如何使用 JavaScript jQuery 使用父页面中 JS 变量的数据填充弹出窗口 在我的示例中 我有一个文件名数组 我在父窗口中最多列出五个 如果还有更多 我想提供一个链接来打开弹出窗口并列出数组中的每个帖子 因此 如果我打开一个包
  • 计算文本选择的 xy 位置

    我正在尝试使用 DOM 元素创建自己的文本选择 是的 我的意思是当您在此元素中选择文本时 您会在文本后面看到蓝色背景 这个想法是停止默认行为 蓝色 并使用我自己的元素来完成工作 方法是找到选择的 xy 位置 然后放置绝对定位的元素 我希望能
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐

  • 计算 Java 集合中出现次数的优雅方法

    给定一个可能有重复项的对象集合 我希望最终得到每个对象的出现次数 我通过初始化一个空的来做到这一点Map 然后迭代Collection并将对象映射到其计数 每次映射已包含该对象时增加计数 public Map
  • .NET 通过时区名称获取时区偏移量

    在数据库中 我将所有日期 时间存储为 UTC 我知道用户的时区名称 例如 美国东部标准时间 为了显示正确的时间 我想我需要将用户的时区偏移量添加到 UTC 日期 时间 但是我如何获得时区名称的时区偏移量 谢谢你 您可以使用TimeZoneI
  • 计算字符串中最大连续 RE 组的数量[重复]

    这个问题在这里已经有答案了 如何计算字符串中连续字符串组的最大数量 import re s HELLOasdHELLOasdHELLOHELLOHELLOasdHELLOHELLO Give me the max amount of con
  • SwiftUI - 如何在 macOS 上将 onCommand 与 NSMenuItem 结合使用

    我正在尝试找到在 macOS 上将 NSMenuItem 与 SwiftUI onCommand 连接的最佳解决方案 目前我正在做以下事情 在 AppDelegate 中 我创建了一个虚拟函数 以便能够列出第一响应者收到的操作列表的函数 I
  • IntelliJ 工件 JAR 文件:无法找到或加载主类

    我在 IntelliJ 中创建了一个 JAR 工件 可以选择将 JAR 文件提取到目标 JAR 看起来像这样 我正确填写了清单信息 我使用 ZIP 检查了 JAR 文件的内容 它包含 jar 文件 正确填充的 MANIFEST MF 和我的
  • 隐藏文件输入在提交时不保留值

    我有一个带有假按钮的隐藏文件输入和用于浏览器显示一致性的输入 我目前也可以看到原始输入 并且发现使用它上传文件一切运行正常 然而 使用 dummyfile 中的按钮通过 javascript 触发点击 该值将按预期加载 并且在 UI 中也是
  • 如何在 Linux 上动态插入 Python 中的 C 函数(无需 LD_PRELOAD)?

    我如何在运行时 不LD PRELOAD 拦截 挂钩 C 函数 例如fopen 在 Linux 上 就像 Windows 上的 Detours 一样 我想从 Python 执行此操作 因此 我假设该程序已经在运行 CPython VM 并重新
  • 文件上传 API:多部分/表单数据与正文中的原始内容?

    我注意到 至少 有两种方法可以通过 API 将文件上传到 HTTP 服务器 您可以使用multipart form data 这是浏览器本机对文件上传 HTML 输入所做的操作 但您也可以POST请求正文中的文件内容 可能具有正确的 Con
  • 无效的 int 输入陷入无限循环[重复]

    这个问题在这里已经有答案了 do cout lt lt Enter the numerator and denominator of the first fraction cin gt gt a gt gt b cout lt lt end
  • 通过另一个表对 hasMany 进行 Sequelize

    好的 我有以下三个models Module var Module sequelize define module id DataTypes INTEGER name DataTypes STRING description DataTyp
  • Linux 核心转储太大!

    最近 我注意到应用程序生成的核心转储的大小有所增加 最初 它们的大小约为 5MB 包含大约 5 个堆栈帧 现在我的核心转储超过 2GB 其中包含的信息与较小的转储没有什么不同 有什么方法可以控制生成的核心转储的大小吗 它们不应该至少小于应用
  • 使用 Neo4J 和 Spring Data 按 ID 创建关系

    我定义了一个简单的节点对象 如下所示 Node product public class Product Id private String sku Relationship type SOLD BY private Set
  • 如何更改应用商店中的销售国家/地区[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您好 我的应用程序出现在美国商店 但它主要是澳大利亚应用程序 如何让它出现在澳大利亚应用商店而不是美国应用商店中 但是我仍然可以在澳大利亚应用商店中搜
  • 通过 feature_columns 使用 Dataset API 将自由文本特征输入 Tensorflow Canned Estimators

    我正在尝试建立一个模型reddit score f subreddit comment 主要是作为一个示例 我可以在此基础上构建一个工作项目 我的代码是here https github com andrewm4894 my google
  • iOS:UIButton根据文本长度调整大小

    In interface builder holding Command will resize a button to fit its text I was wondering if this was possible to do pro
  • 如何在 ColdFusion 中通过多组验证尝试来实现 OWASP ESAPI 验证器?

    我一直在研究 ColdFusion 9 中包含的 OWASP ESAPI 实用程序 ColdFusion 的内置企业安全 API http www petefreitag com item 788 cfm The encoder实用程序非常
  • PHP 致命错误

    当 PHP 出现致命错误时 有没有办法让代码继续 而不是退出 例如 我遇到超时致命错误 并且我希望每当它发生时就跳过此任务并继续执行其他任务 在这种情况下 脚本退出 有一种使用输出缓冲的 hack 可以让您记录某些致命错误 但是在发生致命错
  • 在WP7中调用普通的Web服务

    我有普通的 NET Web 服务 不是 WCF 服务 我已使用服务参考将此服务添加到我的 WP7 项目中 因为我们没有 通常我们会使用 添加服务引用 选项添加 WCF 服务 但这里我使用 添加服务引用 选项添加普通的 Web 服务 例如我有
  • python 3.5 中的 json.loads 和 Redis

    我使用 json dumps 创建了一个 JSON 对象 并在 Redis 列表中将其 RPUSH ed 当使用 LRANGE redis lrange 返回 JSON 时 我收到一个二进制字符串 b si 00 ff 所以 json lo
  • 如何将 ISO 8601 格式的日期值转换为 JavaScript 中的日期对象?

    我一直在尝试将日期值转换为更易读的格式 为此 我尝试使用 JavaScript 解析日期Date parse 方法 然而 这不适用于输入 例如 2007 09 21T14 15 34 058 07 00 我有 最终目标是输出一个日期字符串