一、日期函數(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>" );
}