JS 日期格式给出 -1 天

JS date format gives -1 day

我想用 toIsoString 函数格式化我的日期,但是函数 returns -1 day 如何解决? event.value 格式为 Tue Apr 19 2022 00:00:00 GMT+0400 (Armenia Standard Time)

 console.log(new Date(event.value).toISOString().slice(0,10))

在控制台中,我得到了这个 2022-04-18 你怎么能看到结果是 -1 天

  startDateChange(event: any): void{
    this.firstDayOfMonth = event;
    console.log(new Date(event.value).toISOString().slice(0, 10));
  }

这是因为您的时区设置。当您在您的时区使用 +0400 时,toISOString 总是返回 +0000。这实际上减少了 4 小时,导致前一天 20:00 小时。

您可以尝试通过在日期中添加 Z 将时区偏移设置为 0 来解决此问题,如第二个示例所示。

第三个示例是一种安全的方法,但如果需要,您需要在前面加上 0。

另一种选择是使用像 Moment.js 这样的 date-library,尽管 moment 已被弃用(我不确定最好的选择是什么,这取决于您)。

// Your example (this might work for some people that are in the +0000 timezone)
console.log(new Date('2021-03-03T00:00:00').toISOString().slice(0,10));

// Second example
console.log(new Date('2021-03-03T00:00:00z').toISOString().slice(0,10));

// Third example
const date = new Date('2021-03-03T00:00:00');
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();

console.log(`${year}-${month}-${day}`);

您可以使用https://day.js.org/

代码:

const dateString = 'Tue Apr 19 2022 00:00:00 GMT+0400 (Armenia Standard Time)'

const date1 = dayjs(dateString).format('YYYY-MM-DD')
console.log(date1)

const date2 = dayjs(dateString).format('YYYY-M-D')
console.log(date2)
<script src="https://cdnjs.cloudflare.com/ajax/libs/dayjs/1.11.0/dayjs.min.js"></script>