moment 时间格式化

3,565 阅读2分钟

官方链接:momentjs.cn/

需求:时间精确到秒,并且时间是本地时间需要国际化(最少中文和英文)

遇到一个很骚气的后端, 返回是 utc 时间但是格式各种骚气,就是没有时间格式对不上。moment 用的还不算熟,趁机学一波。

 

时间转化成 utc 并且国际化

// 强制转换成 utc 并本地化,缺点精确时间醉倒到分钟
const localTime = (value) => moment.utc(value).local().format('lll') 

再看文档,并记录

格式代码 说明 例子
YYYY 年份4位数 2019
YY 年份2位数 19
M 不补0月份 1、2、11、12
MM 补0月份 01、02、11
MMM 月份英文缩写 Jan、Dec
MMMM 月份全写 January、December
D 不补0日期 1、2、11
DD 补0日期 01、02、11
d 周几 0~6,0周日
ddd 周几缩写 Sun
dddd 周几全称 Sunday
A 上午或者下午 大写 AM、PM
a 小午或下午 小写 am、pm
H 小时,24小时 1、23
HH 小时,24小时 01、23
h 小时,12小时 1、12
hh 小时,12小时 01、12
m 1、59
mm 01、59
ss 01、59

其他

格式代码 说明 例子
DDD 一年中的第几天 1、2...365
w 一年中的的几周 eg:8 第8周
Q 第几个季度 1、2、3、4
Do 月的第几天

利用 format

// 使用 format 格式化日期,缺点不能国际化时间不符合最初要求
const localTime = (value) => moment.utc(value).local().format('YYYY年MM月DD日 HH:mm:ss');

// 在上面的基础上增加判断
const localTime = (value, lang) => {
    const format = lang === 'zh-cn' ? 'YYYY年MM月DD日 HH:mm:ss' : 'MMM DD YYYY, HH:mm:ss';
    return moment.utc(value).local().format(format);
}