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

Node.js中基于指定年月获取天数的实现问题(已装date-and-time)

解决Node.js中用date-and-time包获取指定年月天数的问题

我来帮你调整代码,让它能正确返回2019年3月的31天~你的思路是对的,但有几个小细节需要修正:

问题梳理

  1. 字符串转数字遗漏:从req.body.date拆分出的年份、月份是字符串类型,直接传给日期方法可能导致异常;
  2. date-and-time包调用方式错误:你当前date(y, m, 0)的写法不符合包的API规范;
  3. 月份索引的坑:原生JS的Date构造函数月份是0-based(1月对应0),需要注意转换。

修正后的完整代码

首先确保已正确导入date-and-time包:

const date = require('date-and-time'); // ES模块环境用 import date from 'date-and-time';

然后修改你的两个方法:

dailyCalibRptTempTbl(req) {
    return new Promise((resolve, reject) => {
        let responseObj = {};
        const str_date = req.body.date;
        // 将拆分出的年月转为数字类型
        const year = parseInt(str_date.split('-')[0], 10);
        const month = parseInt(str_date.split('-')[1], 10);
        const day = this.getNumOfDays(year, month);
        console.log(day); // 现在传入2019-03会输出31
        // 记得补充resolve/reject逻辑,比如 resolve(responseObj);
    })
}

getNumOfDays(y, m) {
    // 用date-and-time的daysInMonth方法,参数是0-based月份的原生Date对象
    return date.daysInMonth(new Date(y, m - 1));
}

备选方案(无需依赖包)

如果不想用date-and-time,原生JS也能轻松实现:

getNumOfDays(y, m) {
    // 传入1-based月份,new Date(y, m, 0)会自动返回当月最后一天
    return new Date(y, m, 0).getDate();
}

这种方式同样能返回2019年3月的31天,还省去了包依赖。

小提醒

  • 确保req.body.date的格式是YYYY-MM(比如2019-03),否则拆分逻辑要对应调整;
  • Promise里一定要记得调用resolve或reject,不然方法会一直处于pending状态哦。

内容的提问来源于stack exchange,提问作者Pratibha Maruti Sawant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:43:47