var date = '2014-02-02T20:10:00';
console.log(date);
为什么会返回以下内容?:
'2014-02-02T20:10:00'// ok
但:
var date = new Date(date);
console.log(date);
返回:
Sun Feb 02 2014 21:10:00 GMT + 0100 // bad
我希望收到以下内容,其中没有偏移:
Sun Feb 02 2014 20:10:00 GMT
我怎么能这样做?
答案 0 :(得分:2)
您不能正确地将Date
parse字符串(here is a comparison并且在引入ISO8601解析之前 - ECMA5)依赖于Date
对象,因此对于跨浏览器最好自己动手。您也不能依赖从Date.toString()
返回的字符串,并且对于跨浏览器,您需要自己格式化,或使用像moments.js这样的库。就这么简单。
您拥有的字符串是ISO8601格式的日期戳,具体而言,根据ISO8601规范,假定为本地时间,因为没有提供偏移,我将假设它是UTC 。许多浏览器和库,W3C和ECMA5规范(具有改变假设的勘误表)都不同意这一点,你不能理所当然地假定当地时间。
你显然有一个支持这些字符串的浏览器。但是当你输出Date.toString
时,你要求当地时间(根据你的环境),但是你想要UTC(假设),所以你需要Date.toUTCString()
,但这些方法是依赖于实现的,你可能不会在不同的环境中获得相同的字符串。
的Javascript
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
上
答案 1 :(得分:-1)
问题是时区调整,以下是另外一行代码来解决您的问题:
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);
答案 2 :(得分:-2)
在W3 Schools上查看此帖子。它遍历日期对象。您可以使用几种不同的方法来获取您正在寻找的日期格式。