Javascript日期函數(shù)和對象

一、日期函數(shù)

1.Date類型

Date 類型來處理時間和日期.

Date類型使用 UTC

//通用方法
var box = new Date();
alert('toString:' + box.toString()); //得"Sun Feb 10 2019 18:10:59 GMT+0800 (中國標(biāo)準(zhǔn)時間)"。 
alert('本地格式輸出:' + box.toLocaleString()); 

2.Date類型常用方法

參考資料:w3c https://www.w3school.com.cn/jsref/jsref_obj_date.asp

以下方法全部是 Date 生產(chǎn)的對象調(diào)用的,比如說 var date = new Date();

alert(box.getTime()); //獲取日期的毫秒數(shù);返回1970年1月1日至今的毫秒數(shù)  
alert(box.setTime(100)); //以毫秒數(shù)設(shè)置日期
alert(box.getFullYear()); //獲取四位年份
alert(box.setFullYear(2012)); //設(shè)置四位年份
alert(box.getMonth()); //獲取月份,今年的第幾月,注意:0-11月. 2月為1
alert(box.setMonth(11)); //設(shè)置月份
alert(box.getDate()); //獲取日期,這個月的第幾天,比如今天是3月18日,得到18
alert(box.setDate(8)); //設(shè)置日期,返回毫秒數(shù)
alert(box.getDay()); //返回星期幾,注意:0-6,并規(guī)定星期天為第一天,則返回 0,星期一返回1
alert(box.setDay(2)); //設(shè)置星期幾
alert(box.getHours()); //返回小時
alert(box.setHours(12)); //設(shè)置時
alert(box.getMinutes()); //返回分鐘
alert(box.setMinutes(22)); //設(shè)置分鐘
alert(box.getSeconds()); //返回秒數(shù)
alert(box.setSeconds(44)); //設(shè)置秒數(shù)
注意:1.以上 get 的所有方法都不是實(shí)時的,
它記錄的是 date 對象出生的時間,比如說 我把網(wǎng)頁刷新一下,然后date.getSeconds()得到2,然后不刷
新繼續(xù)date.getSeconds() 還是 2.所以說他記錄的不是你訪問的時間,而是 date 出生的時間。
2.以手動設(shè)置時間.現(xiàn)在繼續(xù) var date = new Date();然后 date.setDate(15), 再訪問 date 就得到
 Fri Feb 15 2019 11:30:29 GMT+0800 (中國標(biāo)準(zhǔn)時間),這個 set 的方法就是比如你把日期改了,其
他的星期啥的就也跟著一起變了.
set 的這些方法的作用就是可以當(dāng)做一個鬧鐘來用,比如說你設(shè)置了一個時間,然后和 系統(tǒng)的時間相比對
(用 getTime()的方法做差),如果時間相吻合的話,就觸發(fā)某種事件
var date = new Date();
date.setMinutes(54); 
setInterval(function (){   
if(date.getTime() - new Date().getTime() < 1000){ 
console.log("老鄧還是個寶寶");  
} },1000) 

//這個 setInterval 是定時器,就是每隔 1000 毫秒執(zhí)行一次這個函數(shù),我們設(shè)置了一個 時間,
//用時間戳來求一下,如果設(shè)置的這個時間減去系統(tǒng)時間小于 1000 毫秒的話,我 們就說他們是相吻合的
//然后打印里邊的內(nèi)容,因?yàn)槊扛?1000 毫秒都會執(zhí)行一次,所 以時間到了以后他會一直打印
//解釋:這個 1970 年 1 月 1 日 0 時 0 分 0 秒被定義為計(jì)算機(jī)的紀(jì)元時間,這個方法就可以準(zhǔn)確地計(jì)
//算出現(xiàn)在這個 date 出生的時間距離紀(jì)元時間多少毫秒,他的作用就是可以 當(dāng)做一個時間戳用,來檢驗(yàn)一個
//程序運(yùn)行的效率,比如說:
var firstTime = new Date().getTime(); 
for(var i = 0; i < 100000000; i++){ 
 
} 
var lastTime = new Date().getTime(); 
console.log(lastTime - firstTime); 
//我們讓計(jì)算機(jī)空循環(huán)一億圈,在循環(huán)開始之前記錄一下時間戳,結(jié)束后再記錄一下時 間戳,然后用后邊的
//時間毫秒數(shù)減去前邊的時間毫秒數(shù)來看一下計(jì)算機(jī)運(yùn)行的效率。 再比如你寫了一個程序,想看一下運(yùn)行的
//效率,也可以用時間戳測一下寫的這個程序 運(yùn)行花了多少秒,看能不能繼續(xù)優(yōu)化一下            

3.練習(xí)題

  • 計(jì)算兩個日期之差

//計(jì)算兩個日期之間相差的天數(shù)
var dateBegin = new Date(“2018-11-12”); 
var dateEnd = new Date();//獲取當(dāng)前時間
var dateDiff = dateEnd.getTime() -  dateBegin.getTime();//時間差的毫秒數(shù)
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//計(jì)算出相差天數(shù)
console.log(“兩個日期之間相差天數(shù):”+dayDiff);

計(jì)算當(dāng)前日期的前一天和后一天

Date curDate = new Date();
var preDate = new Date(curDate.getTime() - 24*3600*1000); //前一天
var nextDate = new Date(curDate.getTime() + 24*3600*1000); //后一天

封裝函數(shù),打印當(dāng)前是何年何月何日何時,幾分幾秒。

function myDate() {     
var date = new Date();    
 console.log("當(dāng)前是" + date.getFullYear() + "年" + (date.getMonth() + 1) + "月"
 + date.getDate() + "日" + date.getHours() + "時" + date.getMinutes() + "分" + 
date.getSeconds() + "秒"); } 

//解析:這個比較簡單,直接 get 就行了,但是注意 getMouth()是從 0 開始記起的,所 以得給他加 1,
//現(xiàn)在 myDate()就打印 當(dāng)前是 2020 年 3 月 18 日 12 時 23 分 20 秒。 

二、字符串

### 2.1字符串概念

? 在JS中由單引號或雙引號引起來的都叫字符串,是一種基本數(shù)據(jù)類型

1.字符串創(chuàng)建方式:

? 1.通過new運(yùn)算符創(chuàng)建
? 2.省略new運(yùn)算符創(chuàng)建
? 3.通過常量創(chuàng)建字符串(最常用)

var str=new String("true");
var str1=String(true);
var str2="hello";

2.字符串屬性

? length屬性 :返回當(dāng)前字符串中字符的個數(shù)

var box = 'Mr. 張浩'; //定義一個字符串
var  len=box.length; //獲取字符串的長度
console.log(len);

3.已創(chuàng)建的字符串可通過新值改變

/* 
 ECMAScript中的字符串是不可變的,也就是說,字符串一旦創(chuàng)建,它們的值就不能改變。
要改變某個變量保存的字符串,首先要銷毀原來的字符串,然后再用另一個包含新值的字符串填充該變量。
*/
var str4="hello";
/* str4[1]="x"; //這樣做不可以改變字符串中的值 */
str4="hxllo"; //給變量賦值了新的值
alert(str4);

2.2字符串方法

1. charAt() :訪問字符串的字符

       charAt(n)返回指定索引位置的字符
       【格式】字符串.charAt(下標(biāo))
       【返回值】對應(yīng)下標(biāo)的字符
       【注】我們可以通過字符下標(biāo)去訪問該字符
var box = 'Mr.張浩';
alert(box.charAt(1)); //r
alert(box[1]); //r,通過數(shù)組方式截取

2.charCodeAt()

     charCodeAt(n)返回指定索引位置的字符的ASCII碼值
    【格式】字符串.charCodeAt(下標(biāo))
    【返回值】返回字符串中對應(yīng)下標(biāo)字符的ASCII碼值
var str="hello";
alert(str.charCodeAt(1));//101  

3.concat()

    concat(str1...str2) 將字符串連接
    【格式】字符串1.concat(字符串2)
    【返回值】拼接成的字符串,生成新的字符串
    【注】一般情況下很少用concat,經(jīng)常使用字符串拼接符"+"做字符串拼接。
//案例1
var str2="hello";
var str3="world";
var str4=str2.concat(str3);
alert(str4); //helloworld
alert(str2);//hello
//案例2
var box = 'Mr.Lee';
alert(box.concat(' is ', ' Teacher ', '!')); //Mr.Lee is Teacher !

4.substring():截取字符串

substring(start,end) 截取字符串 
substr(start,length)  截取字符串
    【格式】字符串.substring(start,end)
    作用:字符串提取,在指定范圍內(nèi),提取字符串,生成新的字符串
    返回值:生成的新字符串。
    【注】不包含結(jié)束位置的
  var box="shengbangshenghua";
    alert(box.substring(5));//bangshenghua
    //起始位置,結(jié)束位置
    alert(box.substring(5,9));//bang //9代表下標(biāo)      
    alert(box.substr(5));//bangshenghua
    //起始位置,截取的長度
    alert(box.substr(5,9));//bangsheng  //9代表9個字符

5.indexOf(str)搜索第一個出現(xiàn)的字符串str的位置

indexOf(str)搜索第一個出現(xiàn)的字符串str的位置
    【格式】字符串.indexOf(子串,開始查找的位置);
    【返回值】如果在字符串中查找到了子串第一次出現(xiàn)的位置,返回子串出現(xiàn)的位置,
            否則沒有查找到返回值-1.
    【注意】indexOf() 方法對大小寫敏感! 
lastIndexOf(str)搜索最后出現(xiàn)的字符串str的位置
    【格式】字符串.lastIndexOf(子串,開始查找的位置);
    【返回值】子串在字符串中最后一次出現(xiàn)的位置,如果沒有返回-1。
var box="shengbangshenghua";
alert(box.indexOf("bang"));//5,從開始查找
alert(box.indexOf("bax"));//-1,不存在的值,如果沒有找到返回  -1
alert(box.indexOf("bang",1));//1代表從下標(biāo)1的位置開始查找

alert(box.lastIndexOf("sheng"));//9

6.search() 方法用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串。

【格式】stringObject.search(regexp)
    【參數(shù)】可以是子串,也可以是需要檢索的 RegExp 對象(正則表達(dá)式)。
    【注】1.正則表達(dá)式可以添加修飾符,i代表忽略大小寫,g代表全局匹配.
         2.如果沒有找到任何匹配的子串,則返回 -1。
         3.search() 方法不執(zhí)行全局匹配,它將忽略標(biāo)志 g。它同時忽略 regexp 的 lastIndex 屬性,并且總是從字符串的開始進(jìn)行檢索,這意味著它總是返回 stringObject 的第一個匹配的位置。
var str1="Abcabcabc";
alert(str1.search("abc"));//3
alert(str1.search(/abc/i));

7.replace()

replace(pattern, replacement) 替換字符串
    【格式】字符串.replace(匹配的字符串/正則表達(dá)式,替換成的新字符串)
    【返回值】替換完成以后生成的新字符串。
            想替換所有符合條件的字符串,就必須使用正則表達(dá)式完成。
//案例1:
var box="shengbangqingdian";
alert(box.replace("qingdian","shenghua"));
//案例2
var str="how Are you";
alert(str.replace("are","old are"));
alert(str.replace(/are/ig,"Old are"));

8.字符串分割 split

【格式】字符串.split(分隔符,生成的數(shù)組的長度)
    【返回值】:通過分隔符,分割成的裝有子串的數(shù)組。
    【注意】1.分隔符,整體
           2.會分割出空字符串
           3.如果分割符是空字符串"",那么我們的字符串會分割成單個字符
           4.字符串=>數(shù)組split  數(shù)組=>字符串 join
var str="how Are you";
/* var arr=str.split(" "); */
var arr=str.split(" ",2);//第二個參數(shù)限定數(shù)組的長度,一般用的少  (how,Are)
alert(arr);
var str1="how  Are you";//how Are之間2個空格
var arr1=str1.split("  ");//通過兩個空格分割
var arr2=str1.split(" ");//通過1個空格分割帶有倆空格的字符串
alert(arr1);//how,Are you
alert(arr2);//how,,Are,you /倆空格的位置會分割出空字符串
            
var arr3=str1.split("");
alert(arr3);//h,o,w, , ,A,r,e, ,y,o,u
alert(arr3.join("="));//h=o=w= = =A=r=e= =y=o=u

9 .字符大小寫轉(zhuǎn)換

toLowerCase(str) 將字符串全部轉(zhuǎn)換為小寫
toUpperCase(str) 將字符串全部轉(zhuǎn)換為大寫
var str2="HELLO world";
alert(str2.toLowerCase());//全小寫  hello world
alert(str2.toUpperCase());//全大寫 HELLO WORLD

2.3字符串其他方法

1.String.fromCharCode()

【格式】String.fromCharCode(ASCII碼值);
    【參數(shù)】:ASCII碼值,個數(shù)任意
    【返回值】:ASCII碼值對應(yīng)字符組成的字符串
var str1=String.fromCharCode(97,98,99);
alert(str1);//abc

3.練習(xí)題

1.判斷.js文件名是否正確
分析:合法的文件名應(yīng)該以.js結(jié)尾

var fileName=prompt("請輸入文件名");
 //檢查js文件名
var index = fileName.lastIndexOf(".");
//fileName.substring(index+1,fileName.length)可以寫成fileName.substring(index+1)
if(index!=-1 && index!=0 &&  fileName.substring(index+1,fileName.length)=="js"){   
    document.write("文件名有效");     
}else{
    document.write("文件名無效。");
    }
2.判斷郵箱格式是否正確

分析:合法的郵箱名中至少要包含“@”和“.”, 并檢查“@”是否在“.”之前

var email=prompt("請輸入郵箱");
if(email.indexOf("@")>0 && email.indexOf(".")>0 && (email.indexOf("@")<email.indexOf("."))){
     console.log("郵箱有效");
 }else{
    console.log("無效");
}
    
3.有一段歌詞,每句都以空格“ ”分隔,請將歌詞每句按行輸出

分析:使用split()方法,將一個字符串分割為子字符串,結(jié)果作為字符串?dāng)?shù)組返回,在循環(huán)遍歷數(shù)組輸出

var words="長亭外 古道邊 芳草碧連天 晚風(fēng)扶 柳笛聲殘 夕陽山外山";
document.write("***原歌詞格式***<br>"+words);
document.write("<br>***拆分后歌詞格式***<br>");
var printword=words.split(" "); 
for(var i in printword){
   document.write( printword[i]+"<br>" );
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容