一、日期函数
1.Date类型
Date 类型来处理时间和日期.
Date类型使用 UTC
//通用方法
var box = new Date();
alert('toString:' + box.toString()); //得"Sun Feb 10 2019 18:10:59 GMT+0800 (中国标准时间)"。
alert('本地格式输出:' + box.toLocaleString());
2.Date类型常用方法
参考资料:w3c https://www.w3school.com.cn/jsref/jsref_obj_date.asp
以下方法全部是 Date 生产的对象调用的,比如说 var date = new Date();
alert(box.getTime()); //获取日期的毫秒数;返回1970年1月1日至今的毫秒数
alert(box.setTime(100)); //以毫秒数设置日期
alert(box.getFullYear()); //获取四位年份
alert(box.setFullYear(2012)); //设置四位年份
alert(box.getMonth()); //获取月份,今年的第几月,注意:0-11月. 2月为1
alert(box.setMonth(11)); //设置月份
alert(box.getDate()); //获取日期,这个月的第几天,比如今天是3月18日,得到18
alert(box.setDate(8)); //设置日期,返回毫秒数
alert(box.getDay()); //返回星期几,注意:0-6,并规定星期天为第一天,则返回 0,星期一返回1
alert(box.setDay(2)); //设置星期几
alert(box.getHours()); //返回小时
alert(box.setHours(12)); //设置时
alert(box.getMinutes()); //返回分钟
alert(box.setMinutes(22)); //设置分钟
alert(box.getSeconds()); //返回秒数
alert(box.setSeconds(44)); //设置秒数
注意:1.以上 get 的所有方法都不是实时的,
它记录的是 date 对象出生的时间,比如说 我把网页刷新一下,然后date.getSeconds()得到2,然后不刷
新继续date.getSeconds() 还是 2.所以说他记录的不是你访问的时间,而是 date 出生的时间。
2.以手动设置时间.现在继续 var date = new Date();然后 date.setDate(15), 再访问 date 就得到
Fri Feb 15 2019 11:30:29 GMT+0800 (中国标准时间),这个 set 的方法就是比如你把日期改了,其
他的星期啥的就也跟着一起变了.
set 的这些方法的作用就是可以当做一个闹钟来用,比如说你设置了一个时间,然后和 系统的时间相比对
(用 getTime()的方法做差),如果时间相吻合的话,就触发某种事件
var date = new Date();
date.setMinutes(54);
setInterval(function (){
if(date.getTime() - new Date().getTime() < 1000){
console.log("老邓还是个宝宝");
} },1000)
//这个 setInterval 是定时器,就是每隔 1000 毫秒执行一次这个函数,我们设置了一个 时间,
//用时间戳来求一下,如果设置的这个时间减去系统时间小于 1000 毫秒的话,我 们就说他们是相吻合的
//然后打印里边的内容,因为每隔 1000 毫秒都会执行一次,所 以时间到了以后他会一直打印
//解释:这个 1970 年 1 月 1 日 0 时 0 分 0 秒被定义为计算机的纪元时间,这个方法就可以准确地计
//算出现在这个 date 出生的时间距离纪元时间多少毫秒,他的作用就是可以 当做一个时间戳用,来检验一个
//程序运行的效率,比如说:
var firstTime = new Date().getTime();
for(var i = 0; i < 100000000; i++){
}
var lastTime = new Date().getTime();
console.log(lastTime - firstTime);
//我们让计算机空循环一亿圈,在循环开始之前记录一下时间戳,结束后再记录一下时 间戳,然后用后边的
//时间毫秒数减去前边的时间毫秒数来看一下计算机运行的效率。 再比如你写了一个程序,想看一下运行的
//效率,也可以用时间戳测一下写的这个程序 运行花了多少秒,看能不能继续优化一下
3.练习题
计算两个日期之差
//计算两个日期之间相差的天数
var dateBegin = new Date(“2018-11-12”);
var dateEnd = new Date();//获取当前时间
var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
console.log(“两个日期之间相差天数:”+dayDiff);
计算当前日期的前一天和后一天
Date curDate = new Date();
var preDate = new Date(curDate.getTime() - 24*3600*1000); //前一天
var nextDate = new Date(curDate.getTime() + 24*3600*1000); //后一天
封装函数,打印当前是何年何月何日何时,几分几秒。
function myDate() {
var date = new Date();
console.log("当前是" + date.getFullYear() + "年" + (date.getMonth() + 1) + "月"
+ date.getDate() + "日" + date.getHours() + "时" + date.getMinutes() + "分" +
date.getSeconds() + "秒"); }
//解析:这个比较简单,直接 get 就行了,但是注意 getMouth()是从 0 开始记起的,所 以得给他加 1,
//现在 myDate()就打印 当前是 2020 年 3 月 18 日 12 时 23 分 20 秒。
二、字符串
### 2.1字符串概念
在JS中由单引号或双引号引起来的都叫字符串,是一种基本数据类型
1.字符串创建方式:
1.通过new运算符创建
2.省略new运算符创建
3.通过常量创建字符串(最常用)
var str=new String("true");
var str1=String(true);
var str2="hello";
2.字符串属性
length属性 :返回当前字符串中字符的个数
var box = 'Mr. 张浩'; //定义一个字符串
var len=box.length; //获取字符串的长度
console.log(len);
3.已创建的字符串可通过新值改变
/*
ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。
要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。
*/
var str4="hello";
/* str4[1]="x"; //这样做不可以改变字符串中的值 */
str4="hxllo"; //给变量赋值了新的值
alert(str4);
2.2字符串方法
1. charAt() :访问字符串的字符
charAt(n)返回指定索引位置的字符
【格式】字符串.charAt(下标)
【返回值】对应下标的字符
【注】我们可以通过字符下标去访问该字符
var box = 'Mr.张浩';
alert(box.charAt(1)); //r
alert(box[1]); //r,通过数组方式截取
2.charCodeAt()
charCodeAt(n)返回指定索引位置的字符的ASCII码值
【格式】字符串.charCodeAt(下标)
【返回值】返回字符串中对应下标字符的ASCII码值
var str="hello";
alert(str.charCodeAt(1));//101
3.concat()
concat(str1...str2) 将字符串连接
【格式】字符串1.concat(字符串2)
【返回值】拼接成的字符串,生成新的字符串
【注】一般情况下很少用concat,经常使用字符串拼接符"+"做字符串拼接。
//案例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)
作用:字符串提取,在指定范围内,提取字符串,生成新的字符串
返回值:生成的新字符串。
【注】不包含结束位置的
var box="shengbangshenghua";
alert(box.substring(5));//bangshenghua
//起始位置,结束位置
alert(box.substring(5,9));//bang //9代表下标
alert(box.substr(5));//bangshenghua
//起始位置,截取的长度
alert(box.substr(5,9));//bangsheng //9代表9个字符
5.indexOf(str)搜索第一个出现的字符串str的位置
indexOf(str)搜索第一个出现的字符串str的位置
【格式】字符串.indexOf(子串,开始查找的位置);
【返回值】如果在字符串中查找到了子串第一次出现的位置,返回子串出现的位置,
否则没有查找到返回值-1.
【注意】indexOf() 方法对大小写敏感!
lastIndexOf(str)搜索最后出现的字符串str的位置
【格式】字符串.lastIndexOf(子串,开始查找的位置);
【返回值】子串在字符串中最后一次出现的位置,如果没有返回-1。
var box="shengbangshenghua";
alert(box.indexOf("bang"));//5,从开始查找
alert(box.indexOf("bax"));//-1,不存在的值,如果没有找到返回 -1
alert(box.indexOf("bang",1));//1代表从下标1的位置开始查找
alert(box.lastIndexOf("sheng"));//9
6.search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
【格式】stringObject.search(regexp)
【参数】可以是子串,也可以是需要检索的 RegExp 对象(正则表达式)。
【注】1.正则表达式可以添加修饰符,i代表忽略大小写,g代表全局匹配.
2.如果没有找到任何匹配的子串,则返回 -1。
3.search() 方法不执行全局匹配,它将忽略标志 g。它同时忽略 regexp 的 lastIndex 属性,并且总是从字符串的开始进行检索,这意味着它总是返回 stringObject 的第一个匹配的位置。
var str1="Abcabcabc";
alert(str1.search("abc"));//3
alert(str1.search(/abc/i));
7.replace()
replace(pattern, replacement) 替换字符串
【格式】字符串.replace(匹配的字符串/正则表达式,替换成的新字符串)
【返回值】替换完成以后生成的新字符串。
想替换所有符合条件的字符串,就必须使用正则表达式完成。
//案例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(分隔符,生成的数组的长度)
【返回值】:通过分隔符,分割成的装有子串的数组。
【注意】1.分隔符,整体
2.会分割出空字符串
3.如果分割符是空字符串"",那么我们的字符串会分割成单个字符
4.字符串=>数组split 数组=>字符串 join
var str="how Are you";
/* var arr=str.split(" "); */
var arr=str.split(" ",2);//第二个参数限定数组的长度,一般用的少 (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 .字符大小写转换
toLowerCase(str) 将字符串全部转换为小写
toUpperCase(str) 将字符串全部转换为大写
var str2="HELLO world";
alert(str2.toLowerCase());//全小写 hello world
alert(str2.toUpperCase());//全大写 HELLO WORLD
2.3字符串其他方法
1.String.fromCharCode()
【格式】String.fromCharCode(ASCII码值);
【参数】:ASCII码值,个数任意
【返回值】:ASCII码值对应字符组成的字符串
var str1=String.fromCharCode(97,98,99);
alert(str1);//abc
3.练习题
1.判断.js文件名是否正确
分析:合法的文件名应该以.js结尾
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()方法,将一个字符串分割为子字符串,结果作为字符串数组返回,在循环遍历数组输出
var words="长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山";
document.write("***原歌词格式***<br>"+words);
document.write("<br>***拆分后歌词格式***<br>");
var printword=words.split(" ");
for(var i in printword){
document.write( printword[i]+"<br>" );
}