代码改变世界

熟用js中的Date

2014-10-09 20:12  大额_skylar  阅读(1346)  评论(2编辑  收藏  举报

     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>