js中的Date类型是使用UTC(国际协调时间)自1970年1月1日午夜(零时)开始,经过的毫秒数来保存日期。
1. 创建日期对象 ---> 获得当前日期和时间 var now = new Date();
--->基于制定的日期和时间创建 var date = new Date(year,month,day,hour,minute,second);
需要注意的就是,Date.prototype中的方法都是基于UTC时间的,所以这些方法中month(0-11)、day(1-31)、星期几(0表示星期日,6表示星期六)、hour(0-23)、minute(0-59)、second(0-59)。
2.方法 Date.parse()、Date.UTC()----将日期字符串解析为毫秒数的方法;
Date.now()----返回调用这个方法时的日期和时间的毫秒数;
toDateString()/toTimeString()/toLocaleDateString()/toLocaleTimeString()/toUTCString()----将日期格式化为特定字符串的方法。
Date类型的方法(mdn):https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
找两个题目练练手:
Q.1 实时显示当前时间
1 function timer(){ 2 var now = new Date(); 3 var time = document.getElementById('timer'); 4 var text = now.getFullYear()+'年'+(now.getMonth()+1)+'月'+now.getDate()+'日'+now.getHours()+'时'+now.getMinutes()+'分'+now.getSeconds()+'秒'; 5 time.innerHTML = text; 6 } 7 setInterval(timer,1000);
使用setTimeout()实现相同的计时效果(在执行时间上会有问题):
1 function showTime(){ 2 var time = new Date(); 3 console.log(time.toString()); 4 setTimeout(showTime,1000); 5 } 6 7 showTime();
Q.2 实现XX年还剩多少天
1 function remainTimer(){ 2 var now = new Date(); 3 var year = now.getFullYear(); 4 var total = new Date(year,11,31,23,59,59); 5 //这一年中还剩下的秒数 6 var remain = (total-now)/1000; 7 var day = Math.floor(remain/(60*60*24)), 8 hour = Math.floor(remain%(60*60*24)/(60*60)), 9 minute = Math.floor(remain%(60*60*24)%(60*60)/60), 10 second = Math.floor(remain%(60*60*24)%(60*60)%60); 11 var text = year+'年还剩'+day+'天'+hour+'小时'+minute+'分钟'+second+'秒'; 12 var time = document.getElementById('timer'); 13 time.innerHTML = text; 14 } 15 setInterval(remainTimer,1000);
之前看到微博上阿里的大神的分享《date in web》。学了点皮毛,自己写了下,笔记:
1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset=utf-8> 5 <title>Date-Year</title> 6 </head> 7 <style> 8 </style> 9 <body> 10 <div id="timer"></div> 11 <script> 12 //一天中有这些毫秒 13 var msPerDay = 86400000; 14 //给一个毫秒数,看它是多少天 15 function Day(t){ 16 return Math.floor(t/msPerDay); 17 } 18 console.log('946684800000毫秒是()天:'+Day(946684800000)); 19 function TimeWithInDay(t){ 20 return t%msPerDay; 21 } 22 console.log('946684800001毫秒多少天后余()秒:'+TimeWithInDay(946684800001)); 23 //年份无非就分为闰年和不是闰年,闰年366天,不是闰年365天。 24 // 而闰年的特征就是,能被4整除且不能被100整除或者能被400整除。 25 function DaysInYear(y){ 26 if(y%4 !== 0){ 27 return 365;//不能被4整除,则365天 28 }else if(y%100 !== 0){ 29 return 366;//能被4整除且不能被100整除,则366天,闰年 30 }else if(y%400 !== 0){ 31 return 365;//不能被400整除,则365天 32 }else{ 33 return 366;//能被400整除,则366天,闰年 34 } 35 } 36 console.log('2000年一共有()天:'+DaysInYear(2000)); 37 //从1970年开始到y年,一共经过了多少天(我还没有确切的明白这里为什么要这样做) 38 function DayFromYear(y) { 39 return 365 * (y - 1970) + 40 Math.floor((y - 1969) / 4) - 41 Math.floor((y - 1901) / 100) + 42 Math.floor((y - 1601) / 400); 43 } 44 console.log('从1970到2000年经过了()天:'+DayFromYear(2000)); 45 //从1970年开始到y年,一共经过了多少毫秒 46 function TimeFromYear(y){ 47 return msPerDay * DayFromYear(y); 48 } 49 console.log('从1970年到2000年经过了()毫秒:'+TimeFromYear(2000)) 50 //给一个时间t这是从1970年开始经过了多少年 51 function YearFromTime(t){ 52 var y = 1970; 53 //TimeFromYear(y),逐渐获得从1970年开始一年内的毫秒数,两年内的毫秒数....(可以看t落在哪个范围内了) 54 //大神说这个不是完全的准确 55 while(t>TimeFromYear(y)){ 56 y++; 57 } 58 return y; 59 } 60 console.log('946684800000毫秒是从1970年到()年经过的:'+YearFromTime(946684800000)); 61 console.log('1412846287654毫秒是从1970年到()年经过的:'+YearFromTime(1412846287654)); 62 //给一个毫秒数,看他从1970年经过了..年,现在是几几年,这个年份是不是闰年 63 function InLeapYear(t){ 64 return (DaysInYear(YearFromTime(t))===366)?true:false; 65 } 66 console.log('从1970年经过946684800000毫秒后的这一年是不是闰年:'+InLeapYear(946684800000)); 67 </script> 68 </body> 69 </html>