使用Moment.js生成YYYY-MM-DD日期时返回时间戳的问题
问题原因及解决方法
你的代码存在两个关键问题,导致结果不符合预期:
1. 日期解析格式不匹配
你将year + month + day拼接成了无分隔符的字符串"20231020",但却要求Moment.js按照"YYYY-MM-DD"(带横杠分隔)的格式去解析。两种格式完全不匹配,Moment无法正确识别该日期,因此解析出了错误的时间(你看到的1643950800000是错误日期对应的时间戳)。
2. 未调用格式化方法
即便解析正确,直接console.log(date)打印的是Moment对象本身,控制台会显示其内部的时间戳或对象结构,而非你需要的YYYY-MM-DD格式字符串。必须调用Moment的.format()方法才能生成指定格式的日期字符串。
修正后的代码示例
方式一:构造匹配格式的字符串解析
var year = "2023"; var month = "10"; var day = "20"; // 拼接带横杠的标准日期字符串 var dateStr = `${year}-${month}-${day}`; var date = moment(dateStr, "YYYY-MM-DD"); // 调用format方法输出指定格式 console.log(date.format("YYYY-MM-DD")); // 输出:2023-10-20
方式二:直接传入年、月、日参数(推荐)
注意:Moment.js的月份是0索引(1月对应0,10月对应9),所以需要将输入的月份减1:
var year = "2023"; var month = "10"; var day = "20"; // 转换为数字并调整月份索引 var date = moment([parseInt(year), parseInt(month)-1, parseInt(day)]); console.log(date.format("YYYY-MM-DD")); // 输出:2023-10-20
内容的提问来源于stack exchange,提问作者user2875230
相关产品推荐
相关产品推荐

