Как прокомментировал Nite sh в своем ответе, Etc / GMT совпадает с GMT, когда смещение равно нулю или GMT + 0. Если бы я понял это в начале, я, возможно, не задавал этот вопрос.
Я пробовал следующее, и они приводят к «2019-11-21T09: 53: 10.000Z».
let date1 = new Date('2019 11 21 09:53:10 GMT+0');
console.log(date1.toISOString());
let date2 = new Date('2019 11 21 09:53:10 GMT');
console.log(date2.toISOString());
let date3 = new Date('11/21/2019 09:53:10 GMT+0000');
console.log(date3.toISOString());
let date4 = new Date('11/21/2019 09:53:10 GMT');
console.log(date4.toISOString());
Преобразование не будет работать, если я использую исходное значение семпла, которое содержит '-' и 'Etc /' .
Следующее также приведет к "2019-11-21T09 : 53: 10Z "
let date5 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
console.log(date5.format());
let date6 = moment.tz("2019-11-21 09:53:10", "Etc/GMT+0");
console.log(date6.utc().format());
let date7 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
console.log(date7.format());
let date8 = moment.tz("2019-11-21 09:53:10", "Etc/GMT");
console.log(date8.utc().format());
Я не нашел решения, которое не изменило бы исходное значение. Поэтому мне нужно сначала изменить исходное значение перед созданием объекта Date.
let a = "2019-11-21 09:53:10 Etc/GMT"; // sample value
let b = a.replace(/-/g, " ").replace("Etc/", ""); // result: "2019 11 21 09:53:10 GMT"
let c = new Date(b);
console.log(c.toISOString()); // 2019-11-21T09:53:10.000Z
В качестве альтернативы, без создания нового объекта Date также приемлемо для меня.
let d = "2019-11-21 09:53:10 Etc/GMT"; // sample value
let b = d.replace(" Etc/GMT", "Z").replace(" ", "T"); // result: "2019-11-21T09:53:10Z"
console.log(b);