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

时间:2010-07-09 13:50:32

标签: javascript date

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

2010/07/08 04:21:24.477

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这应该有效:

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

答案 2 :(得分:0)

我的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

答案 3 :(得分:-1)

看起来日期/时间的响应是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对象或查找允许您使用多种不同格式转换日期的代码段。