JavaScript Date

作者: passMaker | 来源:发表于2018-07-22 22:08 被阅读6次

    Date

    时间的表示方式

    GMT

    是指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,因为本初子午线被定义为通过那里的经线。

    自1924年2月5日开始,格林尼治天文台负责每隔一小时向全世界发放调时信息。

    理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。但由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。原因在于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代。

    参考

    UTC

    协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。中华民国采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO 8601类似)称之为世界协调时间。中华人民共和国采用ISO 8601:2000的国家标准GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》中亦称之为协调世界时

    参考

    CST

    北京时间,又名中国标准时间,是中国大陆的标准时间,比世界协调时快八小时(即UTC+8),与香港、澳门、台北、吉隆坡、新加坡等地的标准时间相同。

    参考

    Javascript 中的 Date

    
    var d = new Date()
    console.log(d.toString())   //"Wed Feb 28 2018 17:18:26 GMT+0800 (CST)"
    console.log(d.toGMTString()) //"Wed, 28 Feb 2018 09:18:26 GMT"
    console.log(d.toUTCString())  //"Wed, 28 Feb 2018 09:18:26 GMT"
    console.log(d.toISOString()) //"2018-02-28T09:18:26.967Z"
    
    

    new Date()

    使用Date构造函数创建一个Date的实例

        var d = new Date()
    
        d.getTime()         //返回实例对象距离1970年1月1日00:00:00对应的毫秒数
        d.getDate()         //返回实例对象对应每个月的几号(从1开始)
        d.getDay()          //返回星期,星期日为0,星期一为1,以此类推
        d.getFullYear()     //返回四位的年份
        d.getMonth()        //返回月份(0表示1月,11表示12月)
        d.getHours()        //返回小时(0~23)
        d.getMilliseconds() //返回毫秒(0-999)
        d.getMinutes()      //返回分钟(0-59)
        d.getSeconds()      //返回秒(0-59)
    
        var d2 = new Date()
        d2.setDate()
    
    

    set

    • Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳

    • Date.prototype.setFullYear(year [, month, date]):设置四位年份

    • Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)

    • Date.prototype.setMilliseconds():设置毫秒(0-999)

    • Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)

    • Date.prototype.setMonth(month [, date]):设置月份(0-11)

    • Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)

    • Date.prototype.setTime(milliseconds):设置毫秒时间戳

    Date.prototype.toString()

    toString方法返回一个完整的时间字符串

    var today = new Date();
    today.toString(); // "Fri Apr 03 2015 11:17:29 GMT+0800 (CST)"
    
    

    Date.prototype.toUTCString(),Date.prototype.toISOString()

    toUTCString方法返回对应的UTC时间,也就是比北京时间晚8个小时。toISOString方法返回对应时间的ISO8601写法。

    var today = new Date(1362790014000);
    
    today.toUTCString(); //
    
    today.toISOString(); //
    
    

    Date.prototype.toDateString(),Date.prototype.toTimeString()

    toDateString方法返回日期的字符串形式,toTimeString方法返回时间的字符串形式。

    var today = new Date(1362790014000);
    
    today.toDateString(); // "Fri Apr 03 2015"
    
    today.toTimeString(); // "11:17:29 GMT+0800 (CST)"
    
    

    toLocalDateString, toLocalTimeString

    toLocalDateString方法返回一个字符串,代表日期的当地写法

    toLocalTimeString方法返回一个字符串,代表时间的当地写法

    var today = new Date(1362790014000);
    
    today.toLocaleDateString(); // "2015/4/3"
    
    today.toLocaleTimeString(); // "上午11:17:29"
    
    

    new Date(milliseconds)

    Date对象接受从1970年1月1日00:00:00 UTC开始计算的毫秒数作为参数。这意味着如果将Unix时间戳作为参数,必须将Unix时间戳乘以1000。

    new Date(1378218728000); // Tue Sep 03 2013 22:32:08 GMT+0800 (CST)
    
    // 1970年1月2日的零时
    var Jan02_1970 = new Date(3600*24*1000); // Fri Jan 02 1970 08:00:00 GMT+0800 (CST)
    
    

    new Date(datestring)

    Date对象还接受一个日期字符串作为参数,返回所对应的时间。所有可以被Date.parse()方法解析的日期字符串,都可以当作Date对象的参数

    new Date("2013-02-15")
    new Date("2013-FEB-15")
    new Date("FEB, 15, 2013")
    new Date("FEB 15, 2013")
    new Date("Feberuary, 15, 2013")
    new Date("Feberuary 15, 2013")
    new Date("15, Feberuary, 2013")
    
    

    new Date(year, month [, day, hours, minutes, seconds, ms])

    在多个参数的情况下,Date对象将其分别视作对应的年、月、日、小时、分钟、秒和毫秒。如果采用这种用法,最少需要指定两个参数(年和月),其他参数都是可选的,默认等于0。如果只使用年一个参数,Date对象会将其解释为毫秒数。

    new Date(2013) // Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
    new Date(2013,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
    new Date(2013,0,1) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
    new Date(2013,0,1,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
    new Date(2013,0,1,0,0,0,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
    
    

    上面代码(除了第一行)返回的是2013年1月1日零点的时间,可以看到月份从0开始计算,因此1月是0,12月是11。但是,月份里面的天数从1开始计算。

    静态方法

    Date.now()

    now方法返回当前距离1970年1月1日00:00:00的毫秒数

    Date.now(); // 1427974222853
    
    

    Date.parse()

    parse方法用来解析日期字符串,返回距离1970年1月1日 00:00:00的毫秒数

    日期字符串的格式应该完全或者部分符合YYYY-MM-DDTHH:mm:ss.sssZ格式,Z表示时区,是可选的

    如果解析失败,返回NaN

    Date.parse("January 26, 2011 13:51:50")
    Date.parse("Mon, 25 Dec 1995 13:30:00 GMT")
    Date.parse("Mon, 25 Dec 1995 13:30:00 +0430")
    Date.parse("2011-10-10")
    Date.parse("2011-10-10 20:00:00")
    Date.parse("2011-10-10T14:48:00")
    
    

    注意事项

    在新建日期对象时,如果不设置时间,则认为创建的是 utc 的0点,也就是北京时间8点。 如果设置时间,则是北京时间当前时间。

    new Date('2018-01-01')  // Mon Jan 01 2018 08:00:00 GMT+0800 (CST)
    new Date('2018-01-01 00:00:00')  //Mon Jan 01 2018 00:00:00 GMT+0800 (CST)
    
    

    关于Date的应用函数

    1. 参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:
    • 刚刚( t 距当前时间不到1分钟时间间隔)
    • 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
    • 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
    • 3天前 (t 距离当前时间大于等于24小时,小于30天)
    • 2个月前 (t 距离当前时间大于等于30天小于12个月)
    • 8年前 (t 距离当前时间大于等于12个月)
    function friendlyDate(time){
      var interval = Date.now() - time;
      switch(true){
        case interval<0:
          console.log('在未来');
          break;
        case interval>=0&&interval<(60*1000):  // 距当前时间不到1分钟时间间隔
          console.log('刚刚');
          break;
        case interval>=(60*1000)&&interval<(60*60*1000):  // 距当前时间大于等于1分钟,小于1小时
          console.log('3分钟前');
          break;
        case interval>=(60*60*1000)&&interval<(24*60*60*1000):  // 距离当前时间大于等于1小时,小于24小时
          console.log('8小时前');
          break;
        case interval>=(24*60*60*1000)&&interval<(30*24*60*60*1000):  // 距离当前时间大于等于24小时,小于30天
          console.log('3天前');
          break;
        case interval>=(30*24*60*60*1000)&&interval<(12*30*24*60*60*1000):  // 距离当前时间大于等于30天小于12个月
          console.log('2个月前');
          break;
        case interval>=(12*30*24*60*60*1000):  // 距离当前时间大于等于12个月
          console.log('8年前');
          break;
      }
    }
    friendlyDate('1504513587883');  //输出:"刚刚"
    console.log(Date.now())  //输出:1504513614540
    
    1. 把hh-mm-dd格式数字日期改成中文日期的函数
    function getChsDate(str){
        var dateArr = str.split('-');
            yearStr = dateArr[0],
            monthStr = dateArr[1],
            dayStr = dateArr[2];
        var dict =  ["零","一","二","三","四","五","六","七","八","九","十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","二十一","二十二","二十三","二十四","二十五","二十六","二十七","二十八","二十九","三十","三十一"];
        var chYearStr = dict[parseInt (yearStr[0])]+ dict[parseInt (yearStr[1])]+ dict[parseInt (yearStr[2])]+ dict[parseInt (yearStr[3])]
        var chMothStr = dict[parseInt (monthStr + '')]
        var chDayStr = dict[parseInt(dayStr + '')]
    
        return chYearStr + '年' + chMothStr + '月' + chDayStr + '日'
    }
    
    var str = getChsDate('2013-05-03');
    console.log(str); // 二零一三年五月三日
    
    1. 获取从当前时间到指定日期的间隔时间的函数
    function getChIntv(timeStr) {
        var timeEnd = new Date(timeStr).getTime();
        var timeStart = new Date().getTime();
        var offsetTime = timeEnd - timeStart;
        var days =parseInt( offsetTime/ (1000*60*60*24))
        var hours =parseInt((offsetTime% (1000*60*60*24))/(1000*60*60))
        var minutes =parseInt (( (offsetTime% (1000*60*60*24))%(1000*60*60) )/(1000*60))
        var seconds =parseInt( ( ( (offsetTime% (1000*60*60*24))%(1000*60*60) )%(1000*60))/1000)
        return "距" + timeStr + "还有" + days + "天" + hours + "小时" + minutes + "分" + seconds + "秒";
    }
    
    var timeStr = getChIntv("2018-12-31");
    console.log(timeStr);  //距2018-12-31还有161天9小时20分55秒
    

    相关文章

      网友评论

        本文标题:JavaScript Date

        本文链接:https://www.haomeiwen.com/subject/pgvrmftx.html