Date()日期建立

來源:互聯網
上載者:User

標籤:date日期初始化   js date   date日期建立   new datedatestring   date建立   

哎。。這些個月人變懶了。。。以後多寫寫部落格才行

上周五測試報了個問題,說日期計算出現了問題。原兩日期相差1天的,但是系統計算出相差31天。(當天是2014年10月31日 周五)

後來查了下原因,一兄弟前台js代碼是這麼寫的

功能是想建立一個為‘2014-11-03 23:59:59‘的時間對象。

    var expirationDateStr = '2014-11-03 23:59:59';    var expirationDate = new Date();    expirationDate.setFullYear(parseInt(expirationDateStr.substr(0, 4), 10));    expirationDate.setMonth(parseInt(expirationDateStr.substr(5, 2), 10) - 1);    expirationDate.setDate(parseInt(expirationDateStr.substr(8, 2), 10));    expirationDate.setHours(parseInt(expirationDateStr.substr(11, 2), 10));    expirationDate.setMinutes(parseInt(expirationDateStr.substr(14, 2), 10));    expirationDate.setSeconds(parseInt(expirationDateStr.substr(17, 2), 10));

第二句:new一個Date對象,這個建立的是系統目前時間對象,假設當時時間為2014-10-31 17:30:00,

              控制台列印expirationDate為:Fri Oct 31 23:59:59 UTC+0800 2014(2014-10-31 23:59:59) 。

後六句:設定時間,將expirationDateStr中的年月日時分秒替換到擷取的系統時間。(parseInt(?,10)作用是把?轉化為十進位int型整數,substr()字串截取方法)

我們可以再控制台中列印一下替換後的expirationDate,(console.info(expirationDate))

理想中應該為:                  Mon Nov 3 23:59:59 UTC+0800 2014(2014-11-03 23:59:59)
可是當時列印出來的卻是:Wed Dec 3 23:59:59 UTC+0800 2014(2014-12-03 23:59:59)

後來我特別鬱悶,查了js的api覺得沒問題啊setFullYear();setMonth();setDate();確實是這麼用來的啊。。想想是不是因為傳進去的參數不是int,後來發現也不是。

那為什麼會出現這種情況呢?

分析一下

當前日期“2014-10-31 17:30:00”

然後:setFullYear(2014)沒有問題,還是2014-10-31 17:30:00

           setMonth(10)     出問題了,日期變為“2014-12-01 17:30:00”,這是因為setMonth(10)即改變日期為“2014-11-31 17:30:00”,但是這個日期是不存在的,Date會自動識別並進行轉化,11月只有30天,則月變為12,日則為1.。。最後setMonth(10)其實是將“2014-10-31 17:30:00”轉換成“2014-12-01 17:30:00”(setMonth()參數為0-11,10則為11月)

           setDate(03)         因為設定月的時候日期已經變為“2014-12-01 17:30:00”,所以此時日期為:“2014-12-03 17:30:00”。

          後面時分秒都沒有錯       即出現文章開始控制台列印轉換後日期Wed Dec 3 23:59:59 UTC+0800 2014(2014-12-03 23:59:59)

 

所以,要實現以上功能不能直接用setFullYear();setMonth();setDate();替換當前日期的年月日。(當然java中也是會出現這種問題)

 

 

那應該如何設定就涉及到Date()初始化的問題了。

js的API中對Date()的建立有如下四種:

var d = new Date();var d = new Date(milliseconds);var d = new Date(dateString);var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 

 

話說API中好似沒那麼詳細。。。。

 

對於這四種方法我只說第三種new Date(dateString)

var str1 = "2014-11-06 15:30:00";var str2 = "06-11-2014 15:30:00";var str3 = "2014/11/06 15:30:00";var str4 = "06/11/2014 15:30:00";var str5 = "2014年11月06日 15:30:00";var str6 = "06日11月2014年 15:30:00";console.info("*******建立2014-11-06 15:30:00 日期對象測試*******");console.info(str1 + ":" + new Date(str1));console.info(str2 + ":" + new Date(str2));console.info(str3 + ":" + new Date(str3));console.info(str4 + ":" + new Date(str4));console.info(str5 + ":" + new Date(str5));console.info(str6 + ":" + new Date(str6));console.info("*****正確為:Thu Nov 6 15:30:00 UTC+0800 2014 *****");


控制台測試一下這段js結果如下:

*******建立2014-11-06 15:30:00 日期對象測試******* 2014-11-06 15:30:00:Invalid Date 06-11-2014 15:30:00:Wed Jun 11 15:30:00 UTC+0800 2014 2014/11/06 15:30:00:Thu Nov 6 15:30:00 UTC+0800 2014 06/11/2014 15:30:00:Wed Jun 11 15:30:00 UTC+0800 2014 2014年11月06日 15:30:00:Invalid Date 06日11月2014年 15:30:00:Invalid Date *****正確為:Thu Nov 6 15:30:00 UTC+0800 2014 ***** 

可以看出dateString 的格式為var str3 = "2014/11/06 15:30:00";   即日期用斜杠“/”間隔   為 : yyyy/MM/dd hh:mm:ss 

雖然我不知道還有沒有其他的格式,的那是我發現new Date("11-06-2014 15:30:00");也能建立一個日期為2014-11-06 15:30:00對象。

 

既然如此。如果要實現文章開始代碼的功能,我們可以用以下代碼實現:

    var expirationDateStr = '2014-11-03 23:59:59';    var expirationDate = new Date(expirationDateStr.replace(/-/g, "/"));

 

兩句代碼就可以了。replace()自己查一下。replace(/-/g, "/")意思是替換字串中的“-”為“/”,替換後字串格式為2014/11/03 23:59:59,g全域替換的意思,不加g的話執行一次replace只替換一個“-”


 

 

 

Date()日期建立

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.