最简单获取utc日期是toisostring().slice(0,10),结果如"2024-05-22";本地日期需手动拼接getfullyear()、getmonth()+1、getdate()并补零,或用tolocaledatestring('en-ca',{year:'numeric',month:'2-digit',day:'2-digit'})。

直接用 toISOString() 截取日期部分最简单
JavaScript 的 Date.prototype.toISOString() 返回形如 "2024-05-22T14:30:45.123Z" 的字符串,时区固定为 UTC,但只取前 10 位就能得到标准的 YYYY-MM-DD 格式,无需手动拼接或补零。
实操建议:
- 用
new Date().toISOString().slice(0, 10),一行搞定,结果是"2024-05-22" - 注意:这是 UTC 时间,如果你本地是东八区(如北京时间),且需要的是本地日期(比如“今天是 5 月 22 日”),这个结果可能比你预期早一天
- 若需本地时区的
YYYY-MM-DD,不能依赖toISOString(),得手动构造
手动构造本地时区的 YYYY-MM-DD
用 getFullYear()、getMonth()、getDate() 获取本地时间各字段,再拼接并补零。关键点在于 getMonth() 返回的是 0–11,必须加 1。
实操建议:
- 写法示例:
const d = new Date(); `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}` -
padStart(2, '0')比toString().padStart(2, '0')更安全,避免null或undefined报错 - 别用
getUTCFullYear()等 UTC 方法混搭本地方法,会导致时区混乱
用 toLocaleDateString() 要小心 locale 和选项
这个方法本意是格式化为本地可读字符串,但想强制输出 YYYY-MM-DD 需显式指定 options,否则不同浏览器/系统可能返回 2024/5/22 或 22/05/2024。
一款AI工具,主要用于产品经理技能,适用于 Claude Code、Codex、Cursor 和 Windsurf。涵盖 SaaS 指标诊断、PRD 评审、路线图规划、需求探索,以及面向产品经理的职业转型辅导等,适合需要提升相关任务效率的用户。
实操建议:
- 正确调用:
new Date().toLocaleDateString('en-CA', { year: 'numeric', month: '2-digit', day: '2-digit' })——'en-CA'是关键,它默认用YYYY-MM-DD格式 - 别用
'zh-CN'或不传 locale,中文环境下大概率返回2024/5/22 - 不推荐在服务端(Node.js)使用,因为
en-CA的行为在旧版 Node 中不稳定
常见错误:用 toString() 或 toDateString() 直接截取
这些方法返回的字符串格式不固定:new Date().toString() 是 "Wed May 22 2024 14:30:45 GMT+0800 (CST)",toDateString() 是 "Wed May 22 2024",都含空格和英文缩写,靠 .split(' ')[3] 或正则提取极易出错。
容易踩的坑:
- 用
toDateString().split(' ')[2]取日,遇到"May"和"December"字符串长度不同,但月份位置其实固定;真正问题是年份在第 3 位,不是第 4 位,逻辑易错 - 正则匹配
/\d{4}/可能误抓到时区里的数字(如GMT+0800) - 所有基于字符串解析的方式,在国际化环境或未来 JS 引擎改动下都不可靠
最稳的路径就两条:UTC 场景用 toISOString().slice(0, 10),本地场景用手动拼接。别为了少写几行代码去碰模糊的字符串解析。










