转换为 UTC 在 Javascript 中给出 NaN 错误

Converting to UTC is giving NaN error in Javascript

我有下面的代码,当我试图将它转换成 Date.UTC 格式时出现 NaN 错误。

 let sDate = "2019, 10, 19";
 let min = Date.UTC(sDate);

而下面的代码给出了正确的结果

let min = Date.UTC(2019, 10, 19);

但根据我的需要,sDate 应该作为参数传递,因为它可能会有所不同。如何纠正?

如果你引用docsDate.UTC不会将日期字符串作为参数。它需要单独的部分。

Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])

因此,当您传递 Date.UTC('2019, 10, 19') 时,您只是传递了年份的值,而不是其他值。年值亦非数。因此 NaN。

如果您希望使用日期字符串创建 UTC 日期,则必须拆分值。


日期 参数 不是字符串:

let sDate = "2019, 10, 19";
 let min = Date.UTC(...sDate.split(', '));
 console.log(new Date(min));

您可以使用String.split(解构)将已知日期字符串格式转换为年、月、日。传递给 Date.UTC 函数时,您必须从月份值中减去 1,因为它接受从 0 到 11(一月到十二月)的月份值。

如果您想进行更复杂的日期解析,我强烈建议您使用 Moment.js 这样的库。这是经过充分测试的,并且具有非常灵活的 API.

const sDate = "2019, 10, 19";
const [year, month, day] = sDate.split(",");
console.log("Date components:", {year, month, day});
// Date constructor takes a month from 0: January to 11: December
const utcDate = Date.UTC(year, month - 1, day);
console.log("Date (ISO):", new Date(utcDate).toISOString());
console.log("Date (toLocaleString):", new Date(utcDate).toLocaleString("en", { timeZone: "UTC"}));

Date.UTC() 方法接受类似于 Date 构造函数的参数,但将它们视为 UTC

Date.UTC(year[, month[, day[, hour[, minute[, second[, millisecond]]]]]])

不能直接使用字符串

getData=(d)=>{
            return [d.getFullYear(),d.getMonth(),d.getDate(), d.getHours(),d.getMinutes()];
        };
        
        
        let splited = getData(new Date('2019, 10, 19'))
        
        console.log(new Date(Date.UTC(...splited)));