1. 程式人生 > >關於js new Date()是GMT本地時間 轉換CST格林威治 的操作

關於js new Date()是GMT本地時間 轉換CST格林威治 的操作

問題描述
js接收java後臺的時間資料時,時間格式的CST時間(北京時間,China Standard Time,UTC+8:00),而js預設的是GMT時間格式,js new出來的時間物件會比java傳來的資料多了14個小時。
原因:
new Date(CST)。new Date通過解析currentDateStr返回一個long型別的時間差(UTC時間)來構造日期物件,但這個解析的過程中,如果遇到CST,會被認為是指北美的時區,比格林威治時間(GMT)晚6個小時,按照轉換關係,轉成UTC需要加6個小時。而在輸出receivedCurrentDate的時候會呼叫toString方法,會根據所在的時區格式化輸出日期,也就是將UTC轉成China Standard Time,需要加8個小時,所以就出現了相差14個小時

拓展:
UTC:
世界協調時(Coordinated Universal Time,簡稱UTC)又稱世界標準時間或世界協調時間,是最主要的世界時間標準,在時刻上儘量接近於格林尼治標準時間。對於大多數用途來說,UTC時間被認為能與GMT時間互換,基本相等,但GMT時間已不再被科學界所確定
GMT:
格林尼治標準時間(Greenwich Mean Time,簡稱GMT)指位於英國倫敦郊區的皇家格林尼治天文臺當地的標準時間,格林尼治時間基於天文觀測本身的缺陷,已經不再被作為標準時間使用。現在的標準時間,是由原子鐘報時的協調世界時(UTC)來決定。
CST:

CST代表了4個不同的時間,每個時間和UTC之間的轉換關係如下:

中部標準時區(北美洲),Central Standard Time,UT-6:00

澳洲中部時間,Central Standard Time,UT+9:30

北京時間,China Standard Time,UT+8:00

古巴標準時間,Cuba Standard Time,UT-4:00

 

 

function formatDateForYearAndMonthAndDay(time){
    if (time == '' || time == null || time == undefined) return '';
    var dateStr = time.split(" ");
    var strGMT = dateStr[0]+" "+dateStr[1]+" "+dateStr[2]+" "+dateStr[5]+" "+dateStr[3]+" GMT+0800";
    var dateData = new Date(Date.parse(strGMT));
    var datetime = new Date();
    datetime.setTime(dateData);
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
    var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
    // var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
    // var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
    return year + "-" + month + "-" + date;
}

 

在網上找到了 的這種方法 不能實現想要的目的     還是會產生14小時的時間差: