当我将字符串日期转换为日期对象时,日期错误:
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 构造函数:这始终假定日期位于本地时区:
\nconst date = new Date(1980, 0, 1); // remember, months are 0-based\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |