JavaScript日期格式化:生成yyyymmddhhmmss格式字符串求助
问题解答
核心疑问解答
是否需要调用toString()?
不需要提前调用toString(),JavaScript在字符串拼接或补0处理时会自动将数字转换为字符串。提前转换也不会出错,但属于多余操作。如何正确给小于9的日期部分补0?
需先将日期部分转为数字和9比较(不能用字符串比较,否则会出现"10" <= "9"返回true的错误),再给变量本身赋值补0后的字符串。你的代码存在语法错误(int()不是JavaScript内置函数,应使用parseInt()或Number())、逻辑错误(字符串比较判断失效)以及赋值对象错误(不能给int(month)这类表达式赋值)。
现有代码的问题分析
- 多次调用
today():应先创建一个Date实例,避免重复生成日期对象 - 使用非内置的
int()函数:正确的类型转换方式是parseInt()或Number() - 字符串比较逻辑错误:字符串按字符逐个比对,会导致10、11这类数值被误判为需要补0
- 赋值逻辑错误:不能直接给
int(month)赋值,需修改变量本身 - 硬编码覆盖变量值:后续的
hours = 14等代码直接覆盖了之前的补0处理结果 - 最终结果硬编码:
DateString = 2022831142259没有使用变量拼接,完全无效
修正后的代码
// 创建当前日期实例,避免重复生成 const today = new Date(); // 获取各日期部分(数字类型) const year = today.getFullYear(); let month = today.getMonth() + 1; // 月份从0开始,需加1 let day = today.getDate(); let hours = today.getHours(); let minutes = today.getMinutes(); let seconds = today.getSeconds(); // 通用补0函数:将数字转为两位字符串,小于10则前面补0 const padZero = num => num < 10 ? `0${num}` : `${num}`; // 对需要补0的部分进行处理 month = padZero(month); day = padZero(day); hours = padZero(hours); minutes = padZero(minutes); seconds = padZero(seconds); // 拼接成目标格式的字符串 const dateString = `${year}${month}${day}${hours}${minutes}${seconds}`; console.log(dateString); // 输出示例:20220831142259
简化写法(ES6+支持)
如果不想单独写补0函数,可直接使用字符串的padStart方法:
const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, '0'); const day = String(today.getDate()).padStart(2, '0'); const hours = String(today.getHours()).padStart(2, '0'); const minutes = String(today.getMinutes()).padStart(2, '0'); const seconds = String(today.getSeconds()).padStart(2, '0'); const dateString = `${year}${month}${day}${hours}${minutes}${seconds}`;
内容的提问来源于stack exchange,提问作者codestrerrr
相关产品推荐
相关产品推荐

