首页 > 解决方案 > 为什么我在 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

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

标签: javascriptdatedatetime-format

解决方案


几年前我曾经有过这个问题,原因很简单。这是因为日期值末尾的“Z”字符,因为对于 .toLocaleDateString() 函数(假设您没有指定参数,这里是更多信息)意味着该值位于 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,顺便说一下,它很受欢迎。这是更多信息的链接

编辑:

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


推荐阅读