javascript 中可通过 new date().getdate() 直接获取当前日期的数值(1–31),无需补零;若需严格两位字符串格式(如 "05"),可配合 string.prototype.padstart() 实现。
javascript 中可通过 new date().getdate() 直接获取当前日期的数值(1–31),无需补零;若需严格两位字符串格式(如 "05"),可配合 string.prototype.padstart() 实现。
在 JavaScript 中,获取当前日期的“日”(即每月第几天)是一个高频操作。与 PHP 的 date("d") 不同,原生 JavaScript 并不默认返回带前导零的两位字符串,而是直接返回一个整数(范围:1–31)。这恰恰更利于数值比较——你无需字符串转换即可直接用于 if/else 判断。
✅ 正确做法:使用 getDate() 获取数值型日期
const day = new Date().getDate(); // 返回 1 ~ 31 的整数,例如:5、24、31
if (day <= 10) {
console.log(`本月上旬(${day}日),执行 A 逻辑`);
} else if (day >= 20) {
console.log(`本月下旬(${day}日),执行 B 逻辑`);
} else {
console.log(`月中(${day}日),执行 C 逻辑`);
}✅ 优势:简洁、无依赖、性能高、语义清晰;getDate() 返回的就是标准日序号,天然支持数值运算与比较。
⚠️ 常见误区:混淆字符串格式与数值用途
有人试图用 toLocaleDateString() 或手动拼接来模拟 "d" 格式:
// ❌ 不推荐:过度复杂,且结果是字符串,比较易出错
const dayStr = new Date().toLocaleDateString('en-US', { day: '2-digit' }); // "05"
if (dayStr < "10") { /* 这是字符串字典序比较!"05" < "10" ✅,但 "2" < "10" ❌ → "2" > "10" */ }⚠️ 字符串比较会引发隐式类型问题(如 "2" > "10" 结果为 true),应坚决避免。
立即学习“Java免费学习笔记(深入)”;
✅ 如需两位字符串格式(如显示或 API 传参):用 padStart()
const day = new Date().getDate();
const dayTwoDigits = String(day).padStart(2, '0'); // "01", "09", "23", "31"
console.log(`今日日期(两位字符串):${dayTwoDigits}`); // 输出:05 或 27? padStart(2, '0') 是现代浏览器(ES2017+)标准方法,兼容性良好(Chrome 57+/Firefox 48+/Safari 10.1+)。若需支持旧环境,可用 ('0' + day).slice(-2) 替代。
? 补充说明:时区注意事项
new Date().getDate() 基于本地时区。如果你的应用需统一按 UTC 时间判断(例如全球定时任务),请改用:
const dayUTC = new Date().getUTCDate(); // 获取 UTC 时间的日期(1–31)
✅ 总结
| 需求 | 推荐方法 | 示例 |
|---|---|---|
| 数值比较(if/else) | new Date().getDate() | if (day > 15) { ... } |
| 显示/传输两位字符串 | String(day).padStart(2, '0') | "07" |
| UTC 时间上下文 | new Date().getUTCDate() | 避免本地时区偏差 |
无需引入 moment.js 或 date-fns 等库即可高效完成该任务——原生 API 已足够强大、可靠且轻量。










