最近遇到一個需求:
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就是獲取到的當前伺服器的中國標準時間了,可以對這個格式進行具體格式轉化,得到自己想要的格式
})