【问题标题】:Convert (YYYY/MM/DD HH:MM:SS.MS) GMT to local time using JavaScript使用 JavaScript 将 (YYYY/MM/DD HH:MM:SS.MS) GMT 转换为本地时间
【发布时间】:2010-07-09 13:50:31
【问题描述】:

由于某种原因,来自我的一个 WebService 的 SOAP 响应如下所示:

2010/07/08 04:21:24.477

日期格式为YYYY/MM/DD,时间为格林威治标准时间。

我不确定如何将其转换为当地时间,因为格式太奇怪了。

【问题讨论】:

    标签: javascript date


    【解决方案1】:

    Date.parse 实际上应该将大部分日期字符串解析为其各自的时间戳。

    两个警告似乎是:

    • 不支持毫秒,解析后必须分开添加。
    • 它将假定为当地时间,因此在解析之前应附加'GMT''UTC'

    考虑到这些,以下应该可以工作:

    function parseSoapDate(dateString) {
      var dateParts = dateString.split('.'),
          dateParse = dateParts[0],
          dateMilli = dateParts[1];
    
      return new Date(
        Date.parse(dateParse + ' GMT') +
        parseInt(dateMilli, 10)
      );
    }
    
    var date = parseSoapDate('2010/07/08 04:21:24.477');
    

    至于 UTC 到本地时间,JavaScript 的 Date 对象应该已经为您处理了,因为它们可以报告 UTC 和用户本地时区的日期。您可以通过方法名称指定您想要的方法(无论它是否包含UTC):

    alert(date.toString());     // local time
    alert(date.toUTCString());  // UTC time
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      var dateStr = "2010/07/08 04:21:24.477";
      var d = new Date(dateStr.split('.')[0]);
      d.setUTCHours(0);
      

      【讨论】:

        【解决方案3】:

        我的 JSON 返回:YYYY-MM-DD HH:MM:SS,本地化仅适用于选定的浏览器Date.prototype.toLocaleDataString("en-us"[,option] )

            function stringToDate(s) {
                var language = window.navigator.userLanguage || window.navigator.language;
                var options = {year: "numeric", month: "numeric", day: "numeric"};          
                s = s.split(/[-: ]/);           
                d = new Date(Date.UTC(s[0], s[1]-1, s[2], s[3], s[4], s[5]));
                return d.toLocaleDateString( language , options)+" "+d.toLocaleTimeString();
            } 
        // return
        // Friday, November 15, 2013 2:21:04 PM  --> FF25
        // 11/15/2013 2:21:04 PM                 --> Chrome31
        

        【讨论】:

          【解决方案4】:

          看起来日期/时间的响应是 ISO 格式,这是提供日期信息的明智方式。

          假设返回的日期是 7-8-2010。这是 7 月 8 日还是 8 月 7 日?使用 ISO 格式 (YYYY/MM/DD) 的日期可以解决这种歧义。

          您可以通过多种不同方式将此日期转换为所需的格式,即

          var input = '2010/07/08 04:21:24.477';
          var now = new Date(input.slice(0, input.indexOf('.')));
          alert(now.toLocaleString());
          

          您可能想在 Internet 上搜索 Date 对象或查找允许您使用多种不同格式转换日期的 sn-ps。

          【讨论】:

          猜你喜欢
          • 2017-05-18
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-19
          • 2016-06-21
          • 1970-01-01
          相关资源
          最近更新 更多