javascript - 为什么我在 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() 函数(假设您没有指定参数,这里是更多信息)意味着该值位于 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,顺便说一下,它很受欢迎。这是更多信息的链接。
编辑:
我很抱歉我省略了我的代码的一部分,因为我直接从我的一个项目中获取了它。请按照上面的代码或在这个小提琴中测试它。
推荐阅读
- r - 在 R 中加速拆分和合并数据帧行
- javascript - 如何在映射和检查条件后将新对象添加到数组中
- oracle - oracle 触发器精确提取返回超过请求的行数
- .net - 如何为字符串 [] 分配起始索引值
- android - 您可以在 android/ios 应用程序中嵌入统一应用程序吗?
- javascript - 控制加载和播放动画 gif 的时间
- python - 检查日期时间列是否为空
- laravel - Gravatar 错误:请指定有效的电子邮件地址
- python - 错误:命令出错,退出状态为 1 | python安装包
- ansible - 如何为委派给本地主机的任务指定成为密码