Javascript日期函数和对象

一、日期函数

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>" );
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,717评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,501评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,311评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,417评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,500评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,538评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,557评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,310评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,759评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,065评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,233评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,909评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,548评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,172评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,420评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,103评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,098评论 2 352