如何解决使用toLocaleDateString时获得不同日期的原因是什么?
当找到对象数组中存在的节日时,并尝试使用toLocaleDateString
打印用户友好消息时,我得到的节日日期比执行toLocaleDateString
时少了一天
请看下面的例子
const date = "12/25/2020";
const [month,day,year] = date.split("/");
const newDate = `${year}-${month}-${day}`;
const holidays = [
{ celebration: "New year",date: "2020-12-31" },{ celebration: "Christmas",date: "2020-12-25" },{ celebration: "...",date: "2020-12-24" },];
const holiday = holidays.find((holiday) => holiday.date === newDate);
if (holiday) {
const { celebration,date } = holiday;
const options = {
month: "long",day: "2-digit",};
const localDate = new Date(date).toLocaleDateString("en-US",options);
const message = `Date ${date} coincides with the holiday ${celebration} in date ${localDate}. Do you want to continue?`;
console.log(message);
}
我得到Date 2020-12-25 coincides with the holiday Christmas in date December 24. Do you want to continue?
我希望Date 2020-12-25 coincides with the holiday Christmas in date December 25. Do you want to continue?
这是一个微妙的细节,但我得到的是24
而不是25
解决方法
最有可能是由于时区。我认为您居住在美洲。
当您使用Date(string)
创建日期时,它会使用UTC创建日期,但是当您显示日期时,它会显示您自己的时区中的日期,因此UTC / GMT以西的任何日期都将显示2020-12 -25T00:00Z发生在2020-12-24。
此外,使用Date
进行的解析因实现而异,因此通常建议使用Moment.js之类的库进行解析(并且还可以正确处理时区)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。