【问题标题】:How can I get time from ISO 8601 time format in JavaScript?如何从 JavaScript 中的 ISO 8601 时间格式获取时间?
【发布时间】:2013-12-11 11:57:24
【问题描述】:

这是我的 ISO 格式日期。在这里,我想通过 JavaScript 获得像“11:00”这样的时间。 我用了这个方法:

new Date(Mydate).toLocaleString();

但它给出的时间是“16:30”。在 JavaScript 中是否有任何格式或方法可以做到这一点?我怎样才能只得到那个时区的时间。

var Mydate = "2012-10-16T11:00:28.556094Z";

输出将是“11:00”

【问题讨论】:

    标签: javascript datetime momentjs iso8601


    【解决方案1】:

    现代方法,使用 Node.js 和大多数现代浏览器中内置的 ECMAScript 国际化 API:

    const myDate = "2012-10-16T11:00:28.556094Z";
    const time = new Date(myDate).toLocaleTimeString('en',
                     { timeStyle: 'short', hour12: false, timeZone: 'UTC' });
    
    // Output:  "11:00"
    

    较旧的方法,使用moment.js

    var myDate = "2012-10-16T11:00:28.556094Z";
    var time = moment.utc(myDate).format("HH:mm");
    
    // Output:  "11:00"
    

    【讨论】:

    • @BerkerYüceer - 原始答案写于 2013 年。我对其进行了更新以展示不需要 Moment 的现代方法。谢谢。
    【解决方案2】:

    使用这个:

    var date = new Date(Mydate);
    var time = ConvertNumberToTwoDigitString(date.getUTCHours()) + 
               ":" + ConvertNumberToTwoDigitString(date.getUTCMinutes());
    
    // Returns the given integer as a string and with 2 digits
    // For example: 7 --> "07"
    function ConvertNumberToTwoDigitString(n) {
        return n > 9 ? "" + n : "0" + n;
    }
    

    【讨论】:

    • 感谢您的回复。但这里的输出是 16:30。我需要得到“11.00”
    • 然后改用getUTCHours()getUTCMinutes()
    • 您还需要使用这种方法对分钟进行零填充。
    • @user2901979 更新了我的答案
    【解决方案3】:

    试试这个,我忘了我从哪里得到的:

    // --- Date ---
    // convert ISO 8601 date string to normal JS Date object
    // usage: (new Date()).setISO8601( "ISO8601 Time" )
    
    Date.prototype.setISO8601 = function(string) {
      var d, date, offset, regexp, time;
      regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + 
               "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + 
               "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
      d      = string.match(new RegExp(regexp));
      offset = 0;
      date   = new Date(d[1], 0, 1);
      if (d[3])  date.setMonth(d[3] - 1);
      if (d[5])  date.setDate(d[5]);
      if (d[7])  date.setHours(d[7]);
      if (d[8])  date.setMinutes(d[8]);
      if (d[10]) date.setSeconds(d[10]);
      if (d[12]) date.setMilliseconds(Number("0." + d[12]) * 1000);
      if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= (d[15] === '-' ? 1 : -1);
      }
      offset -= date.getTimezoneOffset();
      time = Number(date) + (offset * 60 * 1000);
      return this.setTime(Number(time));
    };
    

    【讨论】:

      【解决方案4】:

      试试这个从 ISO 日期获取时间。

      let Mydate = '2012-10-16T11:00:28.556094Z';
      let result = Mydate .match(/\d\d:\d\d/);
      console.log(result[0]);
      

      输出将是,

      11:00
      

      【讨论】:

        【解决方案5】:

        这个答案在 00:34 的任何时候对我来说都失败了,因为它变成了 24:34

        const time = new Date(myDate).toLocaleTimeString('en',
                         { timeStyle: 'short', hour12: false, timeZone: 'UTC' });
        

        至少对我来说,这似乎是一个更好的解决方案。

        new Date(value).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
        

        来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString

        【讨论】:

          【解决方案6】:

          请注意,toLocaleTimeString 的旧实现可能会因浏览器的实现而有所不同。

          日期:2021 年 9 月 9 日

          语言环境和选项参数自定义了 函数并让应用程序指定哪种语言格式 应该使用约定。在忽略 语言环境和选项参数、语言环境和字符串的形式 返回将完全依赖于实现。

          我最近使用的实现:

          function getTimeFromISODateString(isoDateString) {
            const date = new Date(isoDateString);
            const hours = `0${date.getUTCHours()}`.slice(-2);
            const minutes = `0${date.getUTCMinutes()}`.slice(-2);
            const seconds = `0${date.getUTCSeconds()}`.slice(-2);
            return `${hours}:${minutes}:${seconds}`;
          }
          

          【讨论】:

            猜你喜欢
            • 2019-05-30
            • 2011-12-30
            • 1970-01-01
            • 1970-01-01
            • 2014-08-04
            • 1970-01-01
            • 1970-01-01
            • 2011-01-10
            相关资源
            最近更新 更多