之前在公司開發乙個時間控制項。老手告訴我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位才可以
datedate
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 中存放的是未知物件的位址,所以無法操作該指標所指向的內容,但是可以對該指標進行操作,比如賦...