【问题标题】:How to extract only time from iso date format in javascript?如何从javascript中的iso日期格式中仅提取时间?
【发布时间】:2017-12-02 11:59:24
【问题描述】:
let isoDate = '2018-01-01T18:00:00Z';

我只需要使用任何方法事件时刻提取 18:00。

【问题讨论】:

  • 从哪里获取日期?

标签: javascript


【解决方案1】:

您可以使用正则表达式来匹配该特定区域。

let isoDate = '2018-01-01T18:00:00Z';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

【讨论】:

    【解决方案2】:

    Vanilla Javascript 实现。

    const dateObj = new Date('2018-01-01T18:00:00Z');
    let hour = dateObj.getUTCHours();
    let minute = dateObj.getUTCMinutes();
    
    console.log(hour, minute);

    这利用了Date 内置的Javascript 对象。如果您不想为此单独添加外部库,则应该检查一下。

    参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

    【讨论】:

    • 当您提出的解决方案找到单个值时,格式已关闭@KaungMyatLwin。
    • 是的,但我发现它比从字符串中提取更一致。
    • 老实说,这是我见过的最好的答案。正则表达式总是很昂贵,应该是最后的手段,所以最好使用返回这些值的库。如果格式化是问题,你可以简单地做`${hour}:${minute}`
    • 我同意这是最好的答案,假设您在后端创建一个对象以发送到 fromt,您可以轻松地实现这个,例如 .then(m => { hour: m.time.getUTCHours( )}
    【解决方案3】:

    你可以使用momentjs来做到这一点。

    默认情况下,moment 以本地时间解析和显示。 如果要解析或显示UTC的时刻,可以使用moment.utc()代替moment()

    var t = moment.utc("2018-01-01T18:00:00Z").format("HH:mm")
    console.log(t)
    <script src="https://cdn.jsdelivr.net/npm/moment@2.19.3/moment.min.js"></script>

    【讨论】:

    • 只为 @MikhailKatrin 导入整个库?
    • 没有。 OP中提到了时刻。如果已经包含 lib,这只是一种可以使用的方法。
    • 只是作为一个警告,我收到很多警告消息,并说它不再受支持。我建议编写你自己的函数来处理 vanilla javascript 日期对象。
    【解决方案4】:

    这是一个简单的JavaScript 的快速单行解决方案:

    console.log("2018-01-01T18:00:00Z".replace(/^[^:]*([0-2]\d:[0-5]\d).*$/, "$1"));

    如果您获得的日期是Date 的实例而不是字符串,那么您可以使用toISOString 轻松转换它,如下所示:

    let date = new Date('2018-01-01T18:00:00Z');
    console.log(date.toISOString().replace(/^[^:]*([0-2]\d:[0-5]\d).*$/, "$1"));

    【讨论】:

    • 这个想法是正确的,但是匹配时间的正则表达式是错误的(不会匹配“08:24”)。由于日期是 ISOString,您可以使用更简单的正则表达式,例如 \d\d:\d\d 来匹配时间。
    • 感谢您指出我的错误,@EricBurel。这是我的一个很老的答案,所以我花时间更新它。从理论上讲,\d\d:\d\d 可以接受像 99:99 这样的输入,即使 toISOString 不会产生这样的输入,所以我选择了更严格的方法。
    【解决方案5】:

    我收到如下日期并抓住时间这对我有用

    let isoDate= '2020-09-28T15:27:15+05:30';
    let result = isoDate.match(/\d\d:\d\d/);
    console.log(result[0]);
    

    输出将只是来自 isoDate 的时间,即,

    15:27
    

    【讨论】:

      【解决方案6】:

      您可以使用正则表达式组:

          const ISODateFormat = '2021-07-19T13:04:20.602Z';
          const regex = /([0-9]{4}-[0-9]{2}-[0-9]{2})?.([:0-9]+)/;
          console.log(ISODateFormat.match(regex));
          // expected output:  Array ["2021-07-19T13:04:20", "2021-07-19","13:04:20"]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-05
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多