美文网首页
进阶篇:Math & Date (8-2)

进阶篇:Math & Date (8-2)

作者: 饥人谷1904_陈俊锋 | 来源:发表于2019-05-22 22:39 被阅读0次

    饥人谷学习进阶第 8 天

    Math

    Math对象是JS的内置对象,提供一系列数学常数和数学方法。Math对象只提供静态的属性和方法,所以使用时不用实例化。

    属性

    Math对象提供以下一些只读的数学常数。

    Math.E // 2.718281828459045
    Math.LN2 // 0.6931471805599453
    Math.LN10 // 2.302585092994046
    Math.LOG2E // 1.4426950408889634
    Math.LOG10E // 0.4342944819032518
    Math.PI // 3.141592653589793
    Math.SQRT1_2 // 0.7071067811865476
    Math.SQRT2 // 1.4142135623730951
    

    方法

    round
    用于四舍五入

    Math.round(0.1)  // 0
    Math.round(0.5)  // 1
    

    abs
    返回参数值的绝对值

    Math.abs(1)  // 1
    Math.abs(-1) // 1
    

    max,min
    max方法返回最大的参数,min方法返回最小的参数

    Math.max(2,-1,5)  // 5
    Math.min(2,-1,5)  // -1  
    

    floor,ceil
    floor方法返回小于参数值的最大整数

    Math.floor(3.2)  // 3
    Math.floor(-3.2) // -4
    

    ceil方法返回大于参数值的最小整数

    Math.ceil(3.2)  // 4
    Math.ceil(-3.2) // -3
    

    pow,sqrt
    pow方法返回以第一个参数为底数,第二个参数为幂的指数值

    Math.pow(2,2) // 4
    Math.pow(2,3) // 8
    

    sqrt方法返回参数值的平方根,如果参数是一个负值,则返回NaN

    Math.sqrt(4)  // 2
    Math.sqrt(-4) //NaN
    

    log,exp
    log方法返回以e为底的自然对数值

    Math.log(Math.E) // 1
    Math.log(10)  // 2.302585092994046
    

    求以10为底的对数,可以除以以Math.LN10;求以2为底的对数,可以除以Math.LN2。

    Math.log(100)/Math.LN10  // 2
    Math.log(8)/Math.LN2  // 3
    

    exp方法返回常数e的参数次方

    Math.exp(1)  // 2.718281828459045
    Math.exp(3)  // 20.085536923187668
    

    random
    该方法返回0到1的一个伪随机数,可能等于0,但是一定小于1
    Math.random()

    // 返回给定范围内的随机数
    function getRandomArbitrary (min,max) {
        return Math.random() * (max - min) + min;
    }
    
    // 返回给定范围内的随机整数
    function getRandomInt(min,max) {
        return Math.floor(Math.random() * (max - min + 1)) + min
    }
    

    三角函数
    sin方法返回参数的正弦,cos方法返回参数的余弦,tan方法返回参数的正切

    Math.sin(0)  // 0
    Math.cos(1)  // 1
    Maht.tan(0)  // 0
    

    asin方法返回参数的反正弦,acos方法返回参数的反余弦,atan方法返回参数的反正切。这三个方法的返回值都是弧度值。

    Math.asin(1) // 1.5707963267948966
    Math.acos(1) // 0
    Math.atan(1) // 0.7853981633974483
    

    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),与香港、澳门、台北、吉隆坡、新加坡等地的标准时间相同。

    Date对象

    Date对象是JS提供的日期和时间的操作接口

    JS中的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)
    

    set

    var d2 = new Date()
    d2.setDate()
    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(); // "Wed May 22 2019 22:20:45 GMT+0800 (中国标准时间)"
    

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

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

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

    Date.prototype.toDateString(),Date.prototype.toTimeString()
    toDateString方法返回日期的字符串形式,toTimeString方法返回时间的字符串形式

    var today = new Date();
    today.toDateString();
    today.toTimeString(); 
    

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

    var today = new Date();
    today.toLocaleDateString(); 
    today.toLocaleTimeString(); 
    

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

    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.parse()
    parse方法用来解析日期字符串,返回距离1970年1月1日 00:00:00的毫秒数

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

    如果解析失败,返回NaN

    注意事项

    在新建日期对象时,如果不设置时间,则认为创建的是 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)
    

    常见应用

    1. 去年的今天是星期几
    2. 三十天前是的日期
    3. 距离 2019-01-01 00:00:00 还剩多少天多少小时多少分多少秒
    4. 按照如下方式格式化某个历史时间
    • 刚刚 (距当前时间小于一分钟)
    • xx 分钟前 (大于等于1分钟,小于1个小时)
    • xx 小时前 (大于等于1小时,小于1天)
    • xx 天前 (大于等于1天,小于1个月)
    • xx 月前 (大于等于1月,小于1年)
    • xx 年前 (大于等于1年)

    相关文章

      网友评论

          本文标题:进阶篇:Math & Date (8-2)

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