为什么我在 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();
感谢大家!
我正在使用 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();
感谢大家!