[英]Create another formated date string from an ISO8601 timestamp
var date = '2014-02-02T20:10:00';
console.log(date);
为什么返回以下内容?:
'2014-02-02T20:10:00'//确定
但:
var date = new Date(date);
console.log(date);
返回:
2014年2月2日,星期日21:10:00 GMT + 0100 //不好
我希望收到以下没有偏移的内容:
2014年2月2日,星期日,格林尼治标准时间20:10:00
我该怎么做?
您不能依靠Date
来正确解析字符串( 这是一个比较 ,这是在ISO8601解析-ECMA5引入之前)到Date
对象中的,因此对于跨浏览器,最好自己做。 您也不能依赖于从Date.toString()
返回的字符串,对于跨浏览器,您再次需要自己对其进行格式化,或者使用诸如moments.js之类的库。 就这么简单。
您拥有的字符串是ISO8601格式的日期戳,具体来说,根据ISO8601规范,由于未提供偏移量,因此将其假定为本地时间,我将假定其为UTC 。 许多浏览器和库,W3C和ECMA5规范(已更改勘误的勘误表)对此持不同意见,并且您不能认为本地时间是理所当然的。
您显然有一个支持这些字符串的浏览器。 但是,当您输出Date.toString
您要求的是本地时间(根据您的环境),但是您希望使用UTC(假定),因此需要Date.toUTCString()
,但是这些方法取决于实现,因此您可能无法获取在不同环境中使用相同的字符串。
Java脚本
function parseMyDateString(str) {
var parts = str.split(/[\-T:]/);
parts[1] -= 1;
return new Date(Date.UTC.apply(undefined, parts));
}
function padLeft(arg) {
var str = String(arg);
if (str.length < 2) {
str = '0' + str;
}
return str;
}
function formatMyDateString(date) {
var days = [
'Sun',
'Mon',
'Tue',
'Wed',
'Thu',
'Fri',
'Sat'
],
months = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec'
],
dateString = [
days[date.getUTCDay()],
months[date.getUTCMonth()],
padLeft(date.getUTCDate()),
date.getUTCFullYear()
].join(' '),
timeString = [
padLeft(date.getUTCHours()),
padLeft(date.getUTCMinutes()),
padLeft(date.getUTCSeconds())
].join(':');
return [
dateString,
timeString,
'GMT'
].join(' ');
}
var iso8601String = '2014-02-02T20:10:00',
dateObject = parseMyDateString(iso8601String),
myDateString = formatMyDateString(dateObject);
console.log(myDateString);
输出量
Sun Feb 02 2014 20:10:00 GMT
问题是时区调整,下面还有另外一行代码可解决您的问题:
var date = '2014-02-02T20:10:00'; console.log(date);
var date = new Date(date);
date.setHours(date.getHours() + (date.getTimezoneOffset()/60));
console.log(date);
这是一个工作代码示例
看一下有关W3 Schools的这篇文章。 它遍历日期对象。 您可以使用几种不同的方法来获取所需的日期格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.