js內置對象之Date


js內置對象之Date

  Date對象:封裝一個時間點,提供操作時間的API。Date對象中封裝的是從1970年1月1日0點至今的毫秒數。

 

1、創建Date對象(4種)

  (1)創建Date對象同時獲得當前系統時間,指的是客戶端系統的當前時間

var now = new Date();

  (2)創建日期對象,同時自定義時間,形如:Date("yyyy/MM/dd[ hh:mm:ss]")

var date = new Date("1994/04/06 03:23:55");

  (3)創建日期對ixnag,同時自定義時間:由於計算機中日期MM從0開始計算,范圍是0~11,使用時MM需要加1

var date = new Date(yyyy, MM, dd, hh, mm, ss);

  (4)復制一個對象

var oldDate = new Date("1994/04/06");
var newDate = new Date(oldDate.getTime());//參數可以是一個日期,也可以是一個毫秒數

 

 

2、日期API

  日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds

  2.1 每個分量都有一對get和set方法

    getXXX()用於獲取指定分量的值;setXXX()用於設置指定分量的值,可以自動調整時間進制。Day分量沒有set方法,因為星期是根據日期換算出來的。

  2.2 分量命名規律

    年月日星期,后沒有s,直接是英文;時分秒毫秒,后有s

  2.3 取值范圍

    只有月中的日date分量是從1開始到31結束;其余都是從0開始,到進制最大量-1結束

getXXX() setXXX() 意義 范圍 備注
date.getFullYear() date.setFullYear()    
date.getMonth() date.setMonth() 0~11

使用時get方法

獲得的值需要+1

date.getDate() date.setDate() 1~31  
date.getDay() 星期 0~6  
date.getHours() date.setHours() 0~23  
date.getMinutes() date.setMinutes() 0~59  
date.getSeconds() date.setSeconds() 0~59  
date.getMilliseconds() date.setMilliseconds() 毫秒    

 

3、計算日期(2種)

   1)求時間差:

    日期-日期=毫秒差

    日期-毫秒數=毫秒數

  由於每個月的天數不一樣,故此方法一般用於一個月之內的時間差計算。

  2)對日期的任意分量做計算:3布

    ①取分量:使用對應的get方法

    ②計算

    ③設置分量:使用對應的set方法

    簡寫:date.setXXX(date.getXXX()+n);

    set方法是直接修改原日期。

 

4、日期轉字符串

  1) String(date):返回中國標准時間格式的字符串

  2)date.toLocaleString():返回客戶端當地時間格式,包含日期和時間。

  3)date.toLocaleDateString():返回客戶端當地時間格式,只包含日期部分

  4)date.toLocaleTimeString():返回客戶端當地時間格式,僅包含時間部分

不足:①方法名太長,不利於記憶;②兼容性問題,不同瀏覽器輸出的效果不一樣

 

5、練習

  5.1 計算合同到期時間等

  要求:①創建Date對象保存員工入職日期;②合同有效期為3年,計算合同到期時間;③合同到期前,需要提前一個月續簽。如果提前一月的續簽時間剛好是周末,則需要提前到上一個周五,計算續簽時間;④要求在續簽時間前一周,向員工發出續簽提醒,計算提醒時間。

//入職時間
var hireDate = new Date("2012/6/30");
//賦值對象給endDate
var endDate = new Date(hireDate.getTime());
endDate.setFullYear(endDate.getFullYear()+3);
//
var resumeDate = new Date(endDate.getTime());
resumeDate.setMonth(resumeDate.getMonth()-1);
if(resumeDate.getDay()==6){
    resumeDate.setDate(resumeDate.getDate()-1);
}
if(resumeDate.getDay()==0){
    resumeDate.setDate(resumeDate.getDate()-2);
}
var alertDate = new Date(resumeDate.getTime());
alertDate.setDate(alertDate.getDate()-7);
console.log("到期時間:"+endDate.toLocaleDateString());
console.log("續簽時間:"+resumeDate.toLocaleDateString());
console.log("提醒時間:"+alertDate.toLocaleDateString());

 

  5.2 計算明天開始,任意工作日之后的日期

var now = new Date();
var days = 10;
for(var i=0;i<days;i++){
    /*if(now.getDay()==5){
        now.setDate(now.getDate()+2);
    }else if(now.getDay()==6){
        now.setDate(now.getDate()+1);
    }
    now.setDate(now.getDate()+1);*/
    
    //簡寫
    now.setDate(now.getDate() + (now.getDay()==5 ? 3 : now.getDay()==6 ? 2 : 1));
}
console.log(now.toLocaleDateString());

 

  5.3 自定義format方法,格式化日期

//返回形如“2017年3月2日 星期四 上午 11:12:31”
function format (date){
    var days = ["星期日","星期一","星期二","星期三","星期四","星期五","星期6"];
    //獲取date的年份
    var year = date.getFullYear();
    //獲取date的月份,將月份格式化成兩位數保存
    var month = date.getMonth()<10 ? "0"+date.getMonth() : date.getMonth();
    //獲取date的日期,將日期格式化成兩位數保存
    var d = date.getDate()<10 ? "0"+date.getDate() : date.getDate();
    //從days數組中獲得date的星期對應位置的星期名
    var day = days[date.getDay()];
    //獲得date的小時,保存為兩位數
    var hour = date.getHours();
    var am = hour<12 ? "上午" : "下午";
    hour = hour<12 ? hour : hour-12;
    var minute = date.getMinutes();
    var second = date.getSeconds();
    return year+"年"+month+"月"+d+"日 "+day+" "+am+" "+hour+":"+minute+":"+second;
}
console.log(format(new Date()));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM