【问题标题】:Weird ISO formatted Datestring to Javascript Date奇怪的 ISO 格式日期字符串到 Javascript 日期
【发布时间】:2017-10-12 21:01:58
【问题描述】:

我有一个像这样的日期字符串:20171010T022902.000Z,我需要从这个字符串创建 Javascript 日期。 new Date('20171010T022902.000Z') 将返回 Invalid Date

我看到可以为此目的使用 moment.js,但我不确定如何为给定的示例指定相应的格式。我从另一个线程中找到了这个例子:

var momentDate = moment('1890-09-30T23:59:59+01:16:20', 'YYYY-MM-DDTHH:mm:ss+-HH:mm:ss');
var jsDate = momentDate.toDate();

问题:

如何从给定的 Datestring 以这种格式创建 JavaScript 日期:20171010T022902.000Z(使用时刻)?

【问题讨论】:

  • 好吧,只是从格式字符串中删除分隔符?
  • 像这样:new Date(20171010T022902) ?结果 => SyntaxError: Invalid or unexpected token
  • 没有。那根本没有使用 moment.js 接口
  • 哇,moment('20171010T022902.000Z') 确实有效。我从没想过会这样。你想为此写一个答案以便我接受吗?
  • 请注意,“奇怪”的格式一点也不奇怪。 ISO8601 描述了几种格式。带分隔符的称为“扩展”。没有分隔符的称为“基本”。

标签: javascript momentjs


【解决方案1】:

您的输入 (20171010T022902.000Z) 与已知的 ISO 8601 匹配,因此您可以简单地使用 moment(String) 解析方法。在文档的Supported ISO 8601 strings 部分,您会发现:

20130208T080910.123      # Short date and time up to ms

那么你可以使用toDate()方法

获取 Moment.js 包装的本机 Date 对象的副本

您的代码可能如下所示

var m = moment('20171010T022902.000Z');
console.log( m.format() );
console.log( m.toDate() );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

请注意,此代码不会显示弃用警告(在 Bergi 的评论中引用),因为您输入的是 ISO 8601 已知格式。请参阅this guide 了解有关此警告的更多信息。

此外 “默认情况下,moment 解析并显示在本地时间”here 所述,format() 将显示您的 UTC 输入的本地值(20171010T022902.000ZZ 结尾)。请参阅 moment.utc()utc()Local vs UTC vs Offset guide 了解有关时刻 UTC 模式的更多信息。

【讨论】:

    【解决方案2】:

    我认为你可以在没有 moment.js 的情况下做到这一点。

    基本上使用正则表达式的捕获组提取您需要的部分,然后重新排列成正确的格式以供新日期使用。

    var dtstr = '20171010T022902.000Z';
    
    var dt = new Date(
      dtstr.replace(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\.\d{3}Z)$/,
        "$1-$2-$3T$4:$5:$6$7"));
      
    console.log(dt);
    console.log(dt.toString());

    如果你仍然在使用 moment.js,这应该可以工作 ->

    var dt = moment("20171010T022902.000Z", "YYYYMMDDTHHmmss.SSSSZ");
    
    console.log(dt.toString());
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2020-03-15
      • 2023-03-16
      • 2023-03-22
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多