Date()日期建立,date日期建立

來源:互聯網
上載者:User

Date()日期建立,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只替換一個“-”


 

 

 


javascript Date(日期)對象

那我們從頭開始講:
1. var today;// 這個是建立一個date的時間對象
2. var h;//使用today對象擷取系統當前的小時
3. var m;//使用today對象擷取系統當前的分鐘
4. var s;//使用today對象擷取系統當前的秒鐘
5. checkTime(m);// 調用checkTime()函數,傳入當前分鐘,判斷,如果當前分鐘是否小於10,如果是,就用0加上當前分鐘,比如:23時01分返回當前分鐘
6. checkTime(s);// 調用checkTime()函數,傳入當前秒鐘,判斷,如果當前秒鐘是否小於10,如果是,就用0加上當前分鐘,比如:23時01分01秒返回當前秒鐘
7. document.getElementById('txt').innerHTML=h+":"+m+":"+s
;//意思是在body定義的層中尋找Id為'txt'的對象,然後在此內部顯示目前時間
回答完畢,希望樓主滿意。。。。
 
js裡的Date()支援什樣的日期格式?

Date 對象用於處理日期和時間。
建立 Date 對象的文法:
var myDate=new Date()
Date 對象會自動把當前日期和時間儲存為其初始值。
參數形式有以下5種:
new Date("month dd,yyyy hh:mm:ss");
new Date("month dd,yyyy");
new Date(yyyy,mth,dd,hh,mm,ss);
new Date(yyyy,mth,dd);
new Date(ms);
注意最後一種形式,參數表示的是需要建立的時間和GMT時間1970年1月1日之間相差的毫秒數。各種函數的含義如下:
month:用英文表示月份名稱,從January到December
mth:用整數表示月份,從(1月)到11(12月)
dd:表示一個月中的第幾天,從1到31
yyyy:四位元表示的年份
hh:小時數,從0(午夜)到23(晚11點)
mm:分鐘數,從0到59的整數
ss:秒數,從0到59的整數
ms:毫秒數,為大於等於0的整數
如:
new Date("January 12,2006 22:19:35");
new Date("January 12,2006");
new Date(2006,0,12,22,19,35);
new Date(2006,0,12);
new Date(1137075575000);
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.