【发布时间】:2014-02-14 23:20:46
【问题描述】:
如何使用 javascript 将这个 Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time) 变成这个 2014-02-21 ?
【问题讨论】:
-
将其分解为位(拆分可能会有所帮助),然后将它们格式化为您想要的格式。
标签: javascript jquery
如何使用 javascript 将这个 Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time) 变成这个 2014-02-21 ?
【问题讨论】:
标签: javascript jquery
您可以将字符串分成几个部分,然后将这些位格式化为您需要的格式:
// Reformat string like: Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time)
// do yyyy-mm-dd
function reformatDateString(s) {
function z(n){return (n<10?'0':'') + n;}
var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06',
jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'};
s = s.split(/[ :]/g);
return s[3] + '-' + months[s[1].toLowerCase()] + '-' + z(s[2]);
}
您可以使用 Date 构造函数,但这里没有必要。使用构造函数解析字符串是有问题的,因为 OP 中的字符串不符合 ES5 中指定的格式(并非所有正在使用的浏览器都支持),并且解析依赖于实现。
所以要使用 Date 你无论如何都需要解析这些部分,这会导致许多额外的函数调用。
【讨论】:
使用标准的字符串/数组操作
var timeStamp = 'Fri Feb 21 2014 00:00:00 GMT-0800 (Pacific Standard Time)',
months = {
Jan: 1,
Feb: 2,
Mar: 3,
Apr: 4,
May: 5,
Jun: 6,
Jul: 7,
Aug: 8,
Sep: 9,
Oct: 10,
Nov: 11,
Dec: 12
},
parts = timeStamp.split(' ', 4).slice(1),
myStamp;
function pad(val) {
if (val < 10) {
val = '0' + val;
}
return val;
}
parts[0] = months[parts[0]];
parts.unshift(parts.pop());
parts[1] = pad(parts[1]);
parts[2] = pad(parts[2]);
mystamp = parts.join('-');
console.log(mystamp);
输出
2014-02-21
开启jsFiddle
【讨论】:
-vv 模式。谢谢。 ;)
日期Fri Feb 21 2014 00:00:00 GMT-0800 采用标准RFC 2822 格式,因此您可以使用new Date() 将其作为参数传递来创建新日期。这会将其转换为您可以操作的 UTC(自 1970 年 1 月 1 日以来的毫秒数)。
然后您可以使用toISOString() 方法将UTC 转换为ISO 8601 扩展格式(2014-02-21T00:00:00.000Z)并获取T 之前的文本:
var utcDate = new Date('Fri Feb 21 2014 00:00:00 GMT-0800');
var isoExtendedDate = utcDate.toISOString();
var isoSimpleDate = isoExtendedDate.split("T")[0];
【讨论】:
我无法删除它,因为 OP 选择它作为答案(OP 请选择 Xotic750 的)答案。
【讨论】: