使用 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 到本地时间,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。
【讨论】:
其实不是,日期不是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格式的日期字符串
如何将纪元转换为 yyyy-mm-ddThh:mm:ss linux
将日期解析为 yyyy-MM-dd HH:mm:ss 格式 [重复]
NSJSONSerialization 将日期分隔符从 yyyy/MM/dd 更改为 yyyy\/MM\/dd [重复]