2 回答

TA貢獻1783條經驗 獲得超4個贊
您的日期似乎是 的標準字符串表示new Date(),您可以使用new Date().toISOString()
console.log(new Date().toString())
console.log(new Date().toISOString())
// To create it from string
const dateStr = "Fri Apr 20 2020 00:00:00 GMT+0530 (India Standard Time)"
console.log(new Date(dateStr).toISOString())

TA貢獻1797條經驗 獲得超6個贊
Anurag Srivastava 的回答顯示了您應該如何解析字符串并將其格式化為所需的格式(假設字符串是 ECMA-262 支持的兩種格式之一,并考慮為什么 Date.parse 給出不正確的結果?)。
請注意,“Fri Apr 20 2020 00:00:00 GMT+0530(印度標準時間)”與“2020-04-19T18:30:00.000Z”的時間相同。第一個字符串從 UTC 偏移 5 小時 30 分鐘,因此等效的 UTC 時間提前 5 小時 30 分鐘,這意味著日期是前一天。
您還沒有給出為什么要將其視為 UTC 并且不考慮偏移量的原因,所以我認為您不應該這樣做。
但是,如果您確實有充分的理由將其解析為 UTC 并忽略提供的偏移量,那么您可以:
修改輸入字符串以將偏移量設置為 +0 并使用內置解析器對其進行解析
自己解析字符串并將其視為 UTC
let s = "Fri Apr 20 2020 00:00:00 GMT+0530 (India Standard Time)";
// #1 Modify the input string, setting the offset to +0
let d = new Date(s.replace(/GMT.*$/,'GMT+0000')).toISOString();
console.log(d.toISOString());
// #2 Bespoke parser
function parseAsUTC(s) {
let months = ['jan','feb','mar','apr','may','jun',
'jul','aug','sep','oct','nov','dec'];
let b = s.split(/\W/);
return new Date(Date.UTC(b[3], months.indexOf(b[1].toLowerCase()),
b[2], b[4], b[5], b[6]));
}
console.log(parseAsUTC(s).toISOString());
添加回答
舉報