如何使用 date-fns 将 "yyyy-MM-dd'T'HH:mm:ss 'GMT'Z" 转换为 localDateTime
How to convert "yyyy-MM-dd'T'HH:mm:ss 'GMT'Z" to localDateTime using date-fns
我正在获取以下格式的日期时间
"yyyy-MM-dd'T'HH:mm:ss 'GMT'Z" // -> 2021-07-02T10:09:07:715 GMT+0000
我想将其转换为本地日期时间。我试图在 date-fns (javascript) 中做到这一点。
const createTime ="2021-07-02T10:09:07:715 GMT+0000";
console.log(parseISO(createTime.substring(0, 19))); // -> 2021-07-02T04:09:07.000Z
console.log(
parseISO(createTime.substring(0, 19)).toString()
); // -> Fri Jul 02 2021 10:09:07 GMT+0600 (Bangladesh Standard Time)
// at that time my local DateTime as follow
console.log(new Date()); // -> 2021-07-02T10:09:07.750Z
console.log(new Date().toString()); // -> Fri Jul 02 2021 16:09:07 GMT+0600 (Bangladesh Standard Time)
但无论出于何种原因,它都没有转换为我的当地时间。
是否有任何其他方法可以将这种类型的格式化 DateTime 转换为本地日期时间?
如果是,请帮助...
注意:我在 Node.js..
中使用 date-fns
您无需对输入字符串进行任何操作,只需使用 right parse tokens 和格式即可。 OP 有:
"yyyy-MM-dd'T'HH:mm:ss 'GMT'Z"
其中,给定一个输入字符串,如“2021-07-02T10:09:07:715 GMT+0000”,有以下错误:
- 缺少小数秒部分和分隔冒号的标记
- “Z”是偏移量的错误标记,应该是“X”
所以正确的解析标记是:
"yyyy-MM-dd'T'HH:mm:ss:SSS 'GMT'X"
可以在 npm.runkit.com 处 运行 的示例:
let parse = require('date-fns/parse');
let d = parse('2021-07-02T10:09:07:715 GMT+0000', "yyyy-MM-dd'T'HH:mm:ss:SSS 'GMT'X", new Date());
console.log(d.toISOString());
或者,您可以自己解析字符串,例如
function parseSpecial(s) {
// Get the parts of the timestamp
let [y, m, d, H, M, S, ms, offset] = s.match(/\d+|a-z+|[+-]\d{4}$/g);
// Get the offset sign
let offSign = offset.substr(0,1)
// Convert offset to minutes
let offMins = (offset.substr(1, 2)*60 + +offset.substr(3, 2)) * (offSign == '+'? 1 : -1);
// Create a Date, adjusted by the offset
return new Date(Date.UTC(y, m-1, d, H, M-offMins, S, ms));
}
['2021-07-02T10:09:07:715 GMT+0000',
'2021-07-02T10:09:07:715 GMT+0530',
'2021-07-02T10:09:07:715 GMT-0400'
].forEach(s => console.log(parseSpecial(s).toString()));
我正在获取以下格式的日期时间
"yyyy-MM-dd'T'HH:mm:ss 'GMT'Z" // -> 2021-07-02T10:09:07:715 GMT+0000
我想将其转换为本地日期时间。我试图在 date-fns (javascript) 中做到这一点。
const createTime ="2021-07-02T10:09:07:715 GMT+0000";
console.log(parseISO(createTime.substring(0, 19))); // -> 2021-07-02T04:09:07.000Z
console.log(
parseISO(createTime.substring(0, 19)).toString()
); // -> Fri Jul 02 2021 10:09:07 GMT+0600 (Bangladesh Standard Time)
// at that time my local DateTime as follow
console.log(new Date()); // -> 2021-07-02T10:09:07.750Z
console.log(new Date().toString()); // -> Fri Jul 02 2021 16:09:07 GMT+0600 (Bangladesh Standard Time)
但无论出于何种原因,它都没有转换为我的当地时间。
是否有任何其他方法可以将这种类型的格式化 DateTime 转换为本地日期时间?
如果是,请帮助...
注意:我在 Node.js..
中使用 date-fns您无需对输入字符串进行任何操作,只需使用 right parse tokens 和格式即可。 OP 有:
"yyyy-MM-dd'T'HH:mm:ss 'GMT'Z"
其中,给定一个输入字符串,如“2021-07-02T10:09:07:715 GMT+0000”,有以下错误:
- 缺少小数秒部分和分隔冒号的标记
- “Z”是偏移量的错误标记,应该是“X”
所以正确的解析标记是:
"yyyy-MM-dd'T'HH:mm:ss:SSS 'GMT'X"
可以在 npm.runkit.com 处 运行 的示例:
let parse = require('date-fns/parse');
let d = parse('2021-07-02T10:09:07:715 GMT+0000', "yyyy-MM-dd'T'HH:mm:ss:SSS 'GMT'X", new Date());
console.log(d.toISOString());
或者,您可以自己解析字符串,例如
function parseSpecial(s) {
// Get the parts of the timestamp
let [y, m, d, H, M, S, ms, offset] = s.match(/\d+|a-z+|[+-]\d{4}$/g);
// Get the offset sign
let offSign = offset.substr(0,1)
// Convert offset to minutes
let offMins = (offset.substr(1, 2)*60 + +offset.substr(3, 2)) * (offSign == '+'? 1 : -1);
// Create a Date, adjusted by the offset
return new Date(Date.UTC(y, m-1, d, H, M-offMins, S, ms));
}
['2021-07-02T10:09:07:715 GMT+0000',
'2021-07-02T10:09:07:715 GMT+0530',
'2021-07-02T10:09:07:715 GMT-0400'
].forEach(s => console.log(parseSpecial(s).toString()));