Date日期时间相关
Posted 泪划过你的心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Date日期时间相关相关的知识,希望对你有一定的参考价值。
最近在封装一个关于时间函数的功能时,竟发现这些最基本的函数都有些生疏,于是进来来总结复习下,巩固自己记忆的同时,希望能帮助到需要的人
首先了解下日期对象相关的方法
var date = new Date();// 使用new+构造函数Date创建一个对象 console.log(date); // date内部相当于默认的调用了toString(): Tue Sep 19 2017 08:54:04 GMT+0800 (中国标准时间) console.log(date.toString()); // Tue Sep 19 2017 08:54:04 GMT+0800 (中国标准时间) console.log(date.toDateString()); //外国的的显示方式: Tue Sep 19 2017 console.log(date.toLocaleDateString()); // 年月日 : 2017/9/19 console.log(date.toTimeString()); // 外国人喜欢看的方式: 08:54:04 GMT+0800 (中国标准时间) console.log(date.toLocaleTimeString()); //国内喜欢看的方式: 上午8:54:04
看到这里是不是觉得太多而且类似不好记,其实并不用全部记住,只要记住new Date()就行,其他的等用到的时候看看就行。下面我们就这个方法展开:
// 1.注意:在用new Date()创建对象的时候传入的是2016,10,1,而打印的结果是11月,这是因为日期格式的月份是从0开始的,10自然就代表11月了。
// 日期格式的月份是从0开始的,即0-11位1-12月, var date = new Date(2016,10,1); console.log(date); // Tue Nov 01 2016 00:00:00 GMT+0800 (中国标准时间)
// 2.看看这次传入的对象,估计很多人已然会觉得会打印11月,如果这样想你就错了,这里传入的是字符串,与上面的不一样,该方法会将字符串中的内容转化成相应的月份。要注意与上面的分开哦 // 注意这种字符串形式的和上面从number类型的不一样,这里的月份就是对于的1-12 var date = new Date("2016-10-1"); //正常的输出 10月1号 console.log(date); // Sat Oct 01 2016 00:00:00 GMT+0800 (中国标准时间)
// 3.现在我们来聊聊时间戳,别被这个名词给忽悠住了,其实他就是时间的毫秒形式,也就是从格林威治时间到现在的毫秒数
// 下面5种方法都可以得到时间戳,估计很多人不乐意了,这怎么记得住,没关系,只要记住常用的就行。如:Date.now() 和 new Date("1970-1-1").getTime(),一个是当前时间,一个是任意时间 var date = Date.parse("2016-10-1"); var date = new Date("1970-1-1 0:0:0").getTime() // 注意打印这个结果是-28800000,刚好偏差了8小时,要注意时区的概念,背景时间应该是1970.1.1 8;00才为0的 console.log(date);//1475251200000 13位的毫秒形式 1970 1 1 00:00:00:000 // 日期的本质就是13位的毫秒数字 这样的好处是为了便于计算 var date = +new Date(); // 获取当前的13位数字表示的时间 console.log(date); // 1505784006569 var date = Date.now(); //html5扩展的 IE9+ console.log(date); // 1505784030664 var date = new Date(); console.log(date.valueOf());//打印对象的原来的值,其实就是13位的数字 1505784077460
获取日期时间的指定部分
/** getTime() 返回毫秒数和valueOf()结果一样 getMilliseconds() getSeconds() 返回0-59 getMinutes() 返回0-59 getHours() 返回0-23 getDay() 返回星期几 0周日 6周6 getDate() 返回当前月的第几天,当月的几号 getMonth() 返回月份,从0开始 getFullYear() 返回4位的年份 如 2016 */ var date = new Date(); console.log(date.getTime()); // 和valueOf的效果是一样的,用来获取13位的毫秒数字 console.log(date.getMilliseconds()); console.log(date.getSeconds()); console.log(date.getMinutes()); console.log(date.getHours()); console.log(date.getDay()); // 星期几 周 礼拜几 console.log(date.getDate()); // 当前月份的第几天 几号 console.log(date.getMonth()); //显示的是1,因为这里也是从0开始 console.log(date.getFullYear());
熟悉这些API后,让我们封装一个常见的日期格式函数来练练手吧(非常常见的笔试题目哦,看到了就是赚到了)
function getDate(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; // 月份是从0开始 var day = date.getDate();//获取的是当月的几号 var hour = date.getHours(); var min = date.getMinutes(); var sec = date.getSeconds(); month = month < 10 ? "0" + month : month; day = day < 10 ? "0" + day : day; hour = hour < 10 ? "0" + hour : hour; min = min < 10 ? "0" + min : min; sec = sec < 10 ? "0" + sec : sec; var str = year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec; console.log(str); } var date = new Date(); getDate(date); // 把创建的date作为参数传进来
最后再来看看一个关于日期时间的bug。万恶的IE一直是前端学习的噩梦,各种兼容,今天的主角依然是他。以往的兼容是由于IE的版本比价底的缘故,这也难怪,早期的他并没有想的那么全面。可是这个bug知道IE11都还有,我就不知道该说什么了,
可能某些人存在店大欺客的味道,就象ICBC(爱存不存)一样,你爱用不用。那我们就来看看是什么,以及怎么解决吧!
在IE11之前(包括IE11,但是edge是可以识别的)都是不识别这种横杠模式的时间,如:new Date("1970-1-1 0:0:0"),一定要转化成斜杠才能识别new Date("1970/1/1 0:0:0"),因此在使用前必须通过正则去替换:replace(new RegExp("-","gm"),"/");,
顺带普及下string的replace方法。replace(regexp/substr,replacement)是字符串函数,第一个参数是要替换的字符或者正则模式匹配的字符串,第二个参数则是替换文本或生产替换文本的函数
看完后,是不是对这些API思路更清晰了
以上是关于Date日期时间相关的主要内容,如果未能解决你的问题,请参考以下文章
时间日期相关类:Date类,DateFormat类&SimpleDateFormat类,Calendar类