You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript日期时间补前导零异常问题求助

解决日期格式化的前导零问题

嘿,我来帮你搞定这个日期格式化的问题!你现在得到2018-05-029 019:07:016这种错误格式,核心原因是你拼接前导零和截取字符串的顺序搞反了。

你当前的代码是先对日期部分的字符串做slice(-2),再在前面加'0'——比如当天是29号,day.toString().slice(-2)得到'29',再加'0'就变成了'029',自然就多出一位了。

修正后的代码

我们只需要调整顺序:先把数字和'0'拼接,再截取最后两位,或者更简洁地用ES6的padStart()方法来补零。两种方案都给你:

方案一:调整拼接与截取顺序

var login_date="";
var d = new Date();
var year = d.getFullYear();

var month = d.getMonth() + 1;
month = ('0' + month).slice(-2); // 先拼接再取最后两位

var day = d.getDate();
day = ('0' + day).slice(-2);

var hour = d.getHours();
hour = ('0' + hour).slice(-2);

var minute = d.getMinutes();
minute = ('0' + minute).slice(-2);

var second = d.getSeconds();
second = ('0' + second).slice(-2);

login_date = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
console.log(login_date);

方案二:用ES6的padStart()方法(更简洁)

padStart(targetLength, padString)可以直接把字符串补到指定长度,不够的话前面填充指定字符,非常适合这个场景:

var login_date="";
var d = new Date();
var year = d.getFullYear();

var month = (d.getMonth() + 1).toString().padStart(2, '0');
var day = d.getDate().toString().padStart(2, '0');
var hour = d.getHours().toString().padStart(2, '0');
var minute = d.getMinutes().toString().padStart(2, '0');
var second = d.getSeconds().toString().padStart(2, '0');

login_date = `${year}-${month}-${day} ${hour}:${minute}:${second}`; // 用模板字符串更简洁
console.log(login_date);

效果说明

不管日期部分是一位数(比如9号、5点)还是两位数(比如29号、15点),修正后的代码都会输出标准的两位格式,比如2018-05-29 19:07:16,完全符合MySQL的日期时间格式要求。

内容的提问来源于stack exchange,提问作者user6793735

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:01:33