为什么我在 javascript 有奇怪的约会?

Why am I getting weired date in javascript?

我正在使用 javascript 日期,我正在尝试以我自己的格式 (YYYY-MM-DD) 获取它。但是,我可以管理格式,但这里的问题是我提前一天。例如:如果今天是 3 号(今天),这里使用此代码我得到 4.

let currentDate = new Date(currentForm['dobs']);
let middleDate = currentDate.toLocaleDateString().split('-');
let finalDate = middleDate[0] + '-' + middleDate[1] + '-' + (middleDate[2] - 1);
 console.log(finalDate);

在这里,在 currentDate 我得到的日期是:2051-06-30T18:15:00.000Z

但是,在 finalDate 中,我得到 2049-6-31

忽略语法,为什么我提前了一天?如何获得正确的日期??

几年前我曾经有过这个问题,原因很简单。这是因为日期值末尾的 'Z' 字符,因为对于 .toLocaleDateString() 函数(假设您没有指定参数,这里更多 info )意味着这个值在于UTC+0 时区,出于某种原因,总有一天会让您大吃一惊。

解法: 要解决这个问题,您有很多选择,但也许最简单的方法是像这样自己格式化日期:

function lz(n){return n<10 ? '0'+n : n}
var d = new Date('2019-01-01T00:00:00Z');
var formatted = d.getUTCFullYear()+'-'
    + lz(d.getUTCMonth()+1)+'-'
    + lz(d.getUTCDate())+' '
    + lz(d.getUTCHours())+':'
    + lz(d.getUTCMinutes())+':'
    + lz(d.getUTCSeconds());

或者您可以使用 moment.js which, by the way, is pretty popular. Here is a link 等第三方库了解更多信息。

编辑:

很抱歉,我省略了一部分代码,因为我直接从我的一个项目中获取了它。请按照上面的代码或者在这个fiddle.

中测试

根据@Alfredo Zamudio 的回答,我尝试删除附加在日期值末尾的 'Z',之后一切正常。

let currentDate = new Date(currentForm['dobs']);
let newDate = currentDate.toISOString().replace('Z', '');

在这些代码行之后,我的问题就解决了,然后我使用简单的技术来格式化日期。

let formattedDate = newDate.getFullYear() + '-' + newDate.getMonth() + '-' + newDate.getDate();

感谢大家!