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

如何格式化生日日期?处理ISO 8601格式日期时少1天该如何解决

问题根源

你传入的日期是带Z后缀的UTC标准时间,Intl.DateTimeFormat()默认读取运行环境的本地时区进行日期格式化,如果你所在时区比UTC晚(比如中国处于UTC+8时区),2021-04-13T00:00:00.000Z对应的本地时间就是2021年4月12日16:00,最终格式化的结果就会显示为前一天。

解决方案

你可以根据需求选择以下修改方案:

  • 方案1:强制格式化时使用UTC时区,和输入的日期时区保持一致
export function format(date): string {
  const mydate = new Date(date);
  // 传入timeZone参数指定为UTC
  return new Intl.DateTimeFormat(undefined, { timeZone: 'UTC' }).format(mydate);
}
  • 方案2:如果输入的日期本来就是对应本地时区的日期,传参时去掉末尾的Z后缀,让Date对象按本地时区解析时间
    比如将输入的2021-04-13T00:00:00.000Z改为2021-04-13T00:00:00.000再传入函数即可。
  • 方案3:直接手动读取UTC时间的年月日拼接输出,完全规避时区影响
export function format(date): string {
  const mydate = new Date(date);
  const year = mydate.getUTCFullYear();
  const month = String(mydate.getUTCMonth() + 1).padStart(2, '0');
  const day = String(mydate.getUTCDate()).padStart(2, '0');
  // 可按你需要的格式调整拼接规则,示例为yyyy-MM-dd格式
  return `${year}-${month}-${day}`;
}

内容的提问来源于stack exchange,提问作者Renan Fernandes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:01