官方链接: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);
}