Javascript 日期对象 1980 年 1 月 1 日错误

Her*_*der -1 javascript

当我将字符串日期转换为日期对象时,日期错误:

function formatDate(inputDateString) {
    const date = new Date(inputDateString);
            
    // Check if the date is valid
    if (isNaN(date.getTime())) {
        return "Invalid Date";
    }

    const month = String(date.getMonth() + 1).padStart(2, "0"); // Adding 1 because months are zero-based
    const day = String(date.getDate()).padStart(2, "0");
    const year = date.getFullYear();

    return `${month}/${day}/${year}`;
}

var testDate = formatDate("1980-01-01");
console.log("testDate: " + testDate);
Run Code Online (Sandbox Code Playgroud)

结果:1979 年 12 月 31 日

起初我以为我的getXXX()构造可能是可疑的,但在 Chrome 开发工具中,调试器告诉我,当我创建对象时new Date(),它认为日期是 12/31/1979。我想知道 GMT/UTC 类型的东西,但我相信 js 日期函数已经考虑了用户的时区。我现在正处于山地时间。

啥?

小智 5

JavaScript 的 Date 对象在解释日期字符串时确实考虑了时区。当您传递 YYYY-MM-DD 格式的日期字符串(如“1980-01-01”)时,JavaScript 会将其解释为 UTC 时区的日期。如果您采用山区时间 (MST/MDT),则比 UTC 晚 6 小时 (MDT) 或 7 小时 (MST)。

\n

因此,当您使用字符串“1980-01-01”创建新日期时,假设是 UTC 当天开始时的午夜。当您在 MST 中查看同一时间点时,它仍然是前一天 \xe2\x80\x93,具体来说,即 1979 年 12 月 31 日下午 5 点(或 MDT 中的下午 4 点)。

\n

使用以年、月和日为参数的 Date 构造函数:这始终假定日期位于本地时区:

\n
const date = new Date(1980, 0, 1); // remember, months are 0-based\n
Run Code Online (Sandbox Code Playgroud)\n