工具说明
时间格式化最怕的不是写不出来,而是写错了却看不出来:%m 与 %M 一个是月一个是分、%y 是两位年 %Y 是四位年,这类占位符差一个字母就会在生产环境输出错误时间。本工具让你一边写一边看结果,把猜测变成验证。
最常混淆的几组占位符
- %m 与 %M:小写 m 是月份,大写 M 是分钟。写反了会得到看起来合理但完全错误的时间。
- %y 与 %Y:两位年与四位年。用于对外展示时建议一律用四位年,避免跨世纪歧义。
- %d 与 %e:都是日,区别是 %d 补零、%e 不补零。日期对齐排版用 %d,自然语言展示用 %e 更自然。
- %H 与 %I:24 小时制与 12 小时制。用 %I 时通常要配 %p 表示上午下午。
- %j:一年中的第几天,从 001 开始。年度报表、进度跟踪常用。
时区相关要特别小心
%z 输出的是时区偏移(如 +0800),%Z 输出时区名称。同一个时间戳在不同时区格式化出来的结果不同,服务器时区与用户时区不一致是「差一天」问题最常见的根因。排查时的正确做法是:先确认时间戳本身是否正确,再看格式化时用的时区是什么。
Python 与 JavaScript 的差异
Python 的 strftime 有一批自定义占位符(如补零方式可调的写法),而 JavaScript 原生没有 strftime,通常靠 moment 或 dayjs 的 format 方法,用的是 YYYY、MM、DD 这类连续字母标记,字母数量决定补零与完整度。切换参照体系可以看到两套写法的对照。
你可能还想问
为什么格式化出来的日期和我预期差一天?
超过九成的可能是时区问题。时间戳本身是全球统一的,但格式化成本地时间时依赖运行环境的时区设置。服务器通常跑在 UTC 时区,用户在东八区,两者相差 8 小时——晚上 8 点之后的时间戳在 UTC 下就会被格式化成前一天。排查顺序是:先打印原始时间戳确认数值正确,再检查格式化时用的时区。
%m 和 %M 到底哪个是月哪个是分?
小写的 %m 是月份,大写的 %M 是分钟。可以这样记:月是 bigger 概念,习惯上放在前面,而格式化串里月通常写在日期部分,所以用了小写;分钟属于时间部分,用了大写。这个规则不通用,但用在本工具上可以快速建立直觉——写的时候看预览结果最保险。
一年中的第几天怎么表示?
用 %j,输出三位数并从 001 开始。注意它不受月份影响,跨月计算时无需自己累加各月天数。反过来,从第几天反推日期需要走日期计算,可以直接用站内的日期计算器。
周数 %U 和 %W 有什么区别?
两者都表示一年中的第几周,差别在于把一周的第一天算作星期几:%U 以周日为一周开始,%W 以周一为一周开始。这也导致年初几天的归属不同。做周报、周维度统计时,务必与团队的周起始日约定保持一致,否则会出现同一段时间被算进不同周的情况。
速查在线工具箱