Date的那些事

2022-03-19 14:07:33 字數 1773 閱讀 3456

之前在公司開發乙個時間控制項。老手告訴我date這個東西難搞啊,要考慮很多本身的邏輯合理性,又要考慮不同瀏覽器的相容性。

當時就翻api猛查,發現了很多有意思的東西。

原來獲取年數應該是getfullyear,不是getyear。

月份是從0開始的,呵呵,getmonth的時候需要 ++。

看完api原來很多方法可以在date物件裡封裝了,不用自己寫**和複雜的邏輯判斷了。如獲取前一天可以這樣

var d = new date();

d.setdate(d.getdate() + 1)

這樣就可以直接用封裝好的date物件,而不用考慮閏年,大小月的邏輯判斷了。

雖然這裡很方便,而api裡的標準方法寫的很詳細。可是不同的瀏覽器實現起來還真是詭異,有些完全不按照標準去實現date的。

先看下面這些**

var datestr1 = "2011-02-02";

var datestr2 = "2011-2-2";

var datestr3 = "2011/02/02";

console.log(new date(datestr1));

console.log(new date(datestr2));

console.log(new date(datestr3));

在 chrome上支援的很好,其輸出結果為。三種日期格式串都可以

wed feb 02 2011 00:00:00 gmt+0800 (china standard time)

date.html:17wed feb 02 2011 00:00:00 gmt+0800 (china standard time)

date.html:18wed feb 02 2011 00:00:00 gmt+0800 (china standard time)

在ff日期格式要求就相對嚴格了很多。對資料的要求很高 必須 yyyy-mm-dd 4位-2位-2位才可以

date 

date

date

在ie8上就更是詭異。支援"2011/01/01"或者"2011/1/1" ,不支援"2011-01-01"

日誌: nan

日誌: nan

日誌: wed feb 2 00:00:00 utc+0800 2011

不過這些還不是令人費解的地方。ie8在除錯斷點狀態和非除錯斷點狀態又是不同。這可樣鬱悶。

現在也只是試了3個瀏覽器。其他瀏覽器還沒有試過。又或者某個版本的狀況又不同。要做這個的相容可不是件容易的事。因為總有些你不知道的事冒出來。

於是我換了種實現方式。獲取乙個時間有3種方法。

dateobj = new date()

dateobj = new date(dateval)

dateobj = new date(year, month, date[, hours[, minutes[, seconds[,ms]]]])

那麼我們來用第三種方法。從第三種方法的引數來說,都是number,於是猜測這樣的相容性應該會好點,因為大家要呼叫的介面是一樣的。

如果還是通過傳乙個日期的字串過來,那麼就得把字串轉成有效的引數呼叫第三個方法。

大致思路如下:

function stringtodate(datestr) 

return mydate;

}

這樣我們就建立了乙個某個時間的date的物件了。大功告成。在不同瀏覽器上測試是通過的。

remap的那些事

月14日 今天還在看啟動 看到target.c這裡。先說說target.c的職責。target.c檔案包含和目標初始化相關的 如remap設定 系統時鐘設定和儲存器加速模組設定等,以及irq和fiq的異常處理空函式。好吧,這裡 看到了remap就好好查資料把它搞清楚咯!其實我前面看過這個了,只是人上...

AfxWinMain的那些事

afxwinmain函式原形如下 去掉了原來的很多沒用的注釋和累贅 cpp view plain copy print?int afxapi afxwinmain afxwininit函式 建立當前應用程式主線程 initinstance函式 內部通過create 函式來完成視窗的註冊,建立更新和顯...

void 的那些事

參考 void 是一種特殊的指標型別,可用於存放任意物件的位址。舉個例子 int p 0,pi p void pv p pv pd 但是一旦某個位址放到了void pv中,就不能利用 pv進行操作了 void 中存放的是未知物件的位址,所以無法操作該指標所指向的內容,但是可以對該指標進行操作,比如賦...