Node.js中基于指定年月获取天数的实现问题(已装date-and-time)
解决Node.js中用date-and-time包获取指定年月天数的问题
我来帮你调整代码,让它能正确返回2019年3月的31天~你的思路是对的,但有几个小细节需要修正:
问题梳理
- 字符串转数字遗漏:从
req.body.date拆分出的年份、月份是字符串类型,直接传给日期方法可能导致异常; - date-and-time包调用方式错误:你当前
date(y, m, 0)的写法不符合包的API规范; - 月份索引的坑:原生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
相关产品推荐
相关产品推荐

