2011-10-14 54 views
4

使用Date.UTC()運行時會出現問題,因爲Date.UTC()會自動將0-99之間的任何年份轉換爲1900-1999,當我需要函數來維護原來的一年過去了。我曾嘗試傳遞一個字符串與領先的0年,但我仍然有同樣的問題。Date.UTC()在0-100之間的年份

更新: 感謝您的回覆,並在閱讀MDN文檔後,我採取了一種解決方法,它適用於Chrome & Firefox。

function getUTC(date) { 
    var year = date.getUTCFullYear(); 
    if (year >= 0 && year < 100) { 
    //calculate the difference in ms between UTC time and local time 
    var diff = (new Date(0,0,1,0,0,0,0)).getTime() - Date.UTC(0,0,1,0,0,0,0); 
    //return the local time plus the calculated difference 
    return date.getTime() + diff; 
    } 
    return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()); 
} 

獲得UTC時間的一個簡單的方法是.setUTCFullYear(1200,0,1)或任何.setUTC______()方法的返回值賦值給一個變量。

var date = new Date(); 
var time = date.setUTCFullYear(1200,0,1) 
// time equals -24298834086121 

回答

4

根據MDN,該UTC()方法不支持1900年之前,你可能必須指定單個組件,以便您可以使用setUTCFullYear()

+0

MDN確實聲明它支持1900年以後的版本,但它也支持我在1900年之前在Firefox和Chrome的控制檯中測試過的年份。我知道我的使用超出了預期的用途。 –

1

Date.UTC()僅限於unix時間戳範圍。實質上,你的問題沒有意義,因爲UTC的目的是返回一個時間戳值,它是自1970年1月1日以來的秒數

2

雖然可能很難創建日期在公元100年之前,它是簡單到 將現有的日期對象設置爲任何年份,包括BC年的負數。

請注意,只有IE在返回的字符串中包含「BC」,並正確設置了BC年。 您可以將年份設置爲0,但在非IE瀏覽器中,年份爲 ,並且它們包含在添加或減去跨越AD日期和BC日期的年份時的不存在年份。

IE在1AD之前的第一個可能年份(即1 BC)將一年分配爲0。

一個BC從一個公元只有1年,而不是2個。 在一個公元前5年是公元前5年,而不是公元前4年。

function bc(){ 
    var D= new Date(), A= [].slice.call(arguments, 0); 
    D.setFullYear.apply(D, A); 
    if(A[0]<= 0 &&!document.documentMode){ 
     D.setFullYear(D.getFullYear()-1); 
    } 
    return D; 
} 
bc(50, 0, 1, 0, 0, 0, 0).toUTCString()+'\n\t'+ 
bc(-50, 0, 1, 0, 0, 0, 0).toUTCString() 

/* 
MSIE 8.0 returns: 
    Sat, 1 Jan 50 13:41:00 UTC 
    Sun, 1 Jan 51 B.C. 13:41:00 UTC 

Firefox 7.0.1 returns: 
    Sat, 01 Jan 0050 13:41:35 GMT 
    Sat, 01 Jan -0051 13:41:35 GMT 

Opera 11.51 returns: 
    Sat, 01 Jan 0050 13:42:11 GMT 
    Sat, 01 Jan -051 13:42:11 GMT 

MSIE 10.0 returns: 
    Sat, 1 Jan 50 13:42:36 UTC 
    Sun, 1 Jan 51 B.C. 13:42:36 UTC 

Chrome 14.0.835.163 returns: 
    Sat, 01 Jan 50 13:43:37 GMT 
    Sat, 01 Jan -51 13:43:37 GMT 

Safari 5.1 returns: 
    Sat, 01 Jan 0050 13:44:07 GMT 
    Sat, 01 Jan -051 13:44:07 GMT 
*/ 
相關問題