调用Date.setMonth添加月份后返回奇怪数字的技术咨询
问题解析:为什么调用setMonth后返回的是数字而非日期对象?
嘿,我来帮你搞清楚这个问题!你遇到的现象其实是因为对setMonth方法的返回值理解有误,咱们一步步拆解:
核心原因:setMonth的返回值是时间戳,而非Date对象
Date.prototype.setMonth()方法的作用是修改调用它的Date实例本身,但它的返回值并不是更新后的Date对象,而是一个数值类型的时间戳——也就是从1970年1月1日00:00:00 UTC到该日期的毫秒数。
看你的代码:
var date = new Date(); date = date.setMonth(date.getMonth() + 36);
第一行date是一个Date实例,但第二行你把setMonth返回的时间戳赋值给了date,这就导致date的类型从Date变成了Number,所以你看到的结果是一串数字(比如1622458745610)。
正确的写法
如果你想得到更新后的Date对象,有两种常见方式:
直接修改原对象,不重新赋值
因为setMonth会直接修改调用它的Date实例,所以不需要把返回值赋值回去:var date = new Date(); date.setMonth(date.getMonth() + 36); // 直接修改原date对象 console.log(date); // 这里date仍是Date对象,能正常显示日期创建新的Date对象(不修改原对象)
如果你不想改变原来的date变量,可以把时间戳传入Date构造函数,生成新的对象:var date = new Date(); var newDate = new Date(date.setMonth(date.getMonth() + 36)); console.log(newDate); // 新的Date对象,原date保持不变
补充提醒
不止setMonth,Date对象的其他修改方法(比如setDate、setFullYear、setHours等)也都是这个逻辑:修改原实例,返回时间戳。所以使用时要注意不要误把返回值赋值给原变量哦。
内容的提问来源于stack exchange,提问作者LazioTibijczyk
相关产品推荐
相关产品推荐

