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

调用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对象,有两种常见方式:

  1. 直接修改原对象,不重新赋值
    因为setMonth会直接修改调用它的Date实例,所以不需要把返回值赋值回去:

    var date = new Date();
    date.setMonth(date.getMonth() + 36); // 直接修改原date对象
    console.log(date); // 这里date仍是Date对象,能正常显示日期
    
  2. 创建新的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:39:47