码磊姐姐
雄关漫道真如铁,而今迈步从头越。

最近遇到一个需求:

   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就是获取到的当前服务器的中国标准时间了,可以对这个格式进行具体格式转化,得到自己想要的格式
})
posted on 2024-03-14 18:01  码磊姐姐  阅读(121)  评论(0编辑  收藏  举报