gpt4 book ai didi

javascript - 从 ISO 8601 时间戳创建另一个格式化日期字符串

转载 作者:行者123 更新时间:2023-11-30 06:53:44 24 4
gpt4 key购买 nike

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

我怎样才能做到这一点?

最佳答案

你不能依赖Dateparse将字符串(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 

关于 jsFiddle

关于javascript - 从 ISO 8601 时间戳创建另一个格式化日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com