使用 JavaScript 将 (YYYY/MM/DD HH:MM:SS.MS) GMT 转换为本地时间

Posted

技术标签:

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

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

2010/07/08 04:21:24.477

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

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

【问题讨论】:

【参考方案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 到本地时间,javascriptDate 对象应该已经为您处理了,因为它们可以报告 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。

【讨论】:

其实不是,日期不是ISO格式,根据iso.org/iso/date_and_time_format应该是'2010-07-08T04:21:24.477'

以上是关于使用 JavaScript 将 (YYYY/MM/DD HH:MM:SS.MS) GMT 转换为本地时间的主要内容,如果未能解决你的问题,请参考以下文章

java及javascript两种方式获取YYYY-MM-dd HH:mm:ss格式的日期字符串

需要将日期时间转换为 dd/mm/yyyy [重复]

如何将纪元转换为 yyyy-mm-ddThh:mm:ss linux

将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]

NSJSONSerialization 将日期分隔符从 yyyy/MM/dd 更改为 yyyy\/MM\/dd [重复]

如何使用 NodeJS 将 UTC 日期格式化为 `YYYY-MM-DD hh:mm:ss` 字符串?