前言:最近开发遇到日期格式化的问题,发现用 hh:mm:ss 格式化出来的时间是12小时制的。
就想看看这个格式化字符串的大小写 有什么区别,下面是一些示例,(dateToFormat中是封装的 momentjs 库中formate方法)
const text = '2024-04-25 12:30:45'
console.log('YYYY-MM-DD HH:MM:SS', dateToFormat(text, 'YYYY-MM-DD HH:MM:SS'));
console.log('yyyy-mm-dd hh:mm:ss', dateToFormat(text, 'yyyy-mm-dd hh:mm:ss'));
console.log('yyyy-MM-dd HH:mm:ss', dateToFormat(text, 'yyyy-MM-dd HH:mm:ss'));
console.log('yyyy-MM-dd hh:mm:SS', dateToFormat(text, 'yyyy-MM-dd hh:mm:SS'));
console.log('yyyy-MM-DD HH:mm:ss', dateToFormat(text, 'yyyy-MM-DD HH:mm:ss'));
结果:
可以看到,大小写是会对格式化结果产生影响的。后续查阅资料,总结出以下规则:
以下主要针对moment.js 库中的 formate 方法。
参考官方文档:
https://momentjs.com/docs/#/displaying/
YYYY 与 yyyy
这里前端用momentjs
的方法 实验看起来没啥区别,但是在JAVA
中是区分大小写的。
不过在momentjs库中,只有以下这些表示格式的,没有 yyyy的格式,YYYY就表示我们正常理解的年份(不过好像yyyy 也能用,目前没发现啥问题,不过还建议是用官方的YYYY比较好)
这里补充一下JAVA的解释:
- yyyy: 格里历(公历),表示当天所在的年
- YYYY:代表是week in which year(JDK7之后引入的概念),为 ISO 周日历,意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的YYYY就是下一年。
所以一般JAVA开发中还是用yyyy-MM-dd来做日期格式化
不同位数有啥区别呢?
可以看到 示例中可以用 YY 或者 YYYY
分别表示简写和全写,比如
YYYY / YY
分别显示为 2024 / 24
MM 与 mm
这里的大小写是为了区分 日期的 “月份” 与 时间的 “分钟” .
MMMM/MMM/MM/M 显示为 四月/4月/04/4
(4个M显示全称,3个M显示缩写,中文显示是汉字四和数字4,英文就是January和Jan)
全部示例:
分钟 只有 m / mm, 位数用于展示前导0的。
DD 与 dd
在momentjs
中:
DD 是 表示月份中的第几天数
DDD 则 表示 一年中的第几天
dd 表示的是周中的天数,比如周几
具体如下图:
HH 与 hh
这里大小写是为了区分12小时制和24小时制
HH 表示24小时制