moment、dayjs设置时区

2,071 阅读2分钟

前言

我们有时候使用日期组件时,难免会碰到时区相关,尤其是后端,前端还好根据用户来(也可能设置时区、中英文,一般设置中英文就完事了),当后端为了避免服务器时区问题,会自行设置时区,下面就简单介绍常用的两个时间组件 momentdayjs

moment(推荐)

这里直接设置全局默认时区即可,很方便,一般不会一个项目设置多个时区

除了要导入 moment 还需要导入 moment-timezone

yarn add moment moment-timezone

直接main文件导入设置默认时区即可

import * as moment from 'moment-timezone';
// 设置默认时区为 'Asia/Shanghai'
moment.tz.setDefault('Asia/Shanghai');

其他地方直接使用 moment 即可

import * as moment from 'moment';

const now = moment()

如果局部有需要,直接使用 moment.tz 即可,可以直接使用对应的时区,也可以根据情况使用 utc 直接转化即可

moment.tz("2024-04-18 19:00", "Asia/Shanghai")

顺便提一下,如果要设置默认 format 格式也可以全局设置

import moment from 'moment';
//如果有些版本或者环境这么导入有问题,可以require,但会警告,可以设置让编译器忽略
const moment = require('moment')
moment.defaultFormat = 'YYYY/MM/DD HH:mm';


//设置中文,有些可能会用到中文,当然这个不是默认的
moment.locale('zh-CN');

dayjs(追求包大小时推荐)

dayjs 不能设置全局时区,只能设置局部默认时区,哪里使用哪里导入即可,只需要导入 dayjs

yarn add dayjs

设置时区

//只有本文件导入的有效哈 和moment 不一样
const dayjs = require('dayjs');
const timezone = require('dayjs/plugin/timezone');
dayjs.extend(timezone);
dayjs.tz.setDefault('Asia/Shanghai');

//本页面要使用其他时区的话,可以这样
dayjs.tz("2024-04-18 19:00", "Asia/Shanghai")

最后

这两个包 moment要比 dayjs 大不少,如果需要更小的包,可以考虑 dayjs,如果想用着更方便,那么 moment 挺好的