最近遇到一个需求:
antd的时间组件有个默认的时间,我们是前端自己根据电脑的系统时间 new Date()来定的,new Date()的时间就是系统的时间。但是当测试人员搞事情,把系统时间改了时区,电脑日期改变,那antd组件的默认时间也会跟着变,所以这个时候就不对了,测试说应该都根据中国标准时间来默认显示的
所以前端再想直接new Date()就不对了,我找了半天,找到下面这个解决方法:
既然不能根据系统时间来设置,那根据服务器的时间是可以的吧,我先获取服务器的时间
//这里拿获取百度的地址的时间打比方
const convertToCST= async()=>{
const dateVal = await axios.head('https://www.baidu.com?_='+new Date().getTime()).then(res=>{
//res就是获取到的格林威治时间:GMT格式的
// 示例:假设服务器时间是2023-04-01 12:00:00 GMT
let serverTime = new Date(res.header.date);//这里把获取到的GMT时间转换成Date对象;
if(res.status===200){
//设置date对象,并直接设置GMT时间
let date = new Date(serverTime.getTime()+serverTime.getTimezoneOffset()*6000);
date.setTime(date.getTime()+8*60*60*1000);//这里是将new Date()的时区改为Asia时区
//返回date,是 转换后的 中国标准时间
return date
}
})
}
最后调用这个公共函数convertToCST就可以了
convertToCST().then(res=>{
//Thu Mar 14 2024 17:59:20 GMT+0800 (中国标准时间)
console.log(res)//这个res就是获取到的当前服务器的中国标准时间了,可以对这个格式进行具体格式转化,得到自己想要的格式
})
标签:res,js,date,时间,new,Date,服务器,GMT
From: https://www.cnblogs.com/maleijiejie/p/18073626