1. Math
1.1. 什么是
封装算数计算的常量和API
1.2. 何时
- 只要执行数学计算
1.3. 如何
- 创建:
Math不用创建, 不能new, 直接使用
1.4. API
-
取整: 3 种
-
上取整: 只要超过, 就取下一个整数 ->
Math.ceil(num) -
下取整: 只要超过, 就省略小数部分 ->
Math.floor(num) -
四舍五入取整:
Math.round(num)-
vs
toFixed(d)- 四舍五入取整:
- 缺点: 只能取整, 不能指定小数位数
- 优点: 返回
number, 可直接计算
n.toFixed(d):- 缺点: 返回字符串, 要先转化, 再计算
- 优点: 可按任意小数位数四舍五入
- 四舍五入取整:
-
自定义
round函数:function round(n, d){ //将n* 10的d次方 n *= Math.pow(10, d); //将n四舍五入取整 n = Math.round(n); //将n/ 10的d次方 n /= Math.pow(10,d); return n;//返回n }
-
-
-
乘方和开平方
- 乘方:
Mtah.pow(底数, 幂)- Ex: 10 的 3 次方 ->
Math.pow(10, 3)
- Ex: 10 的 3 次方 ->
- 开平方:
Math.sqrt(n)- Ex: 16 开平方 ->
Math.sqrt(16)
- Ex: 16 开平方 ->
- 乘方:
-
最大值和最小值
- 最大值:
Math.max(值1, 值2, 值3, .....) - 最小值:
Math.min(值1, 值2, 值3, ......) - 问题:
max/min不支持数组参数- 解决:
Math.max.apply(null, arr) - 常作为获取数组中的最大值 / 最小值
- 解决:
- 最大值:
-
随机数:
var numR = Math.roundom()-
0 <= numR < 1-> 取到 0 的几率很低 -
公示: 在任意
min~max之间取一个随机整数-
parseInt(Mathi.random() * (max - min + 1) + min) -
简写: 如果 0 ~
max之间parseInt(Math.randon() * (max + 1))
-
-
2. Date
2.1. 什么是
封装一个时间值, 并提供操作时间的API
2.2. 何时
- 只要保存 / 操作时间, 都要使用
Date
2.3. 如何
-
创建: 4 种
-
自动获得当前系统时间:
var now = new Date()-
强调: 只能获得客户端本地时间
-
-
创建自定义时间点:
var myDate = new Date('yyyy/MM/dd hh:mm:ss')- 如果只关心日期, 不关心时间, 后半部分时分秒可省略 -> 省略后, 默认时间:
00:00:00
- 如果只关心日期, 不关心时间, 后半部分时分秒可省略 -> 省略后, 默认时间:
var myDate = new Date(yyyy, MM - 1, dd, hh, mm, ss)- 月份, 都要 -1 修正 -> 计算机中的月份从 0 开始计算, 这种定义要修正月份
-
使用毫秒数创建日期对象
-
原理: 日期对象中保存的是 1970 年 1 月 1 日 0 点至今的毫秒数 -> 整数
-
为什么: 时间段, 不受时区影响
-
相同的毫秒数: 在不同时区可显示不同的时间点
-
总结: 今后在数据库中存储时间或在程序中存储时间都用毫秒数, 不要用文字
-
问题: 人看不懂毫秒数
- 解决: 将毫秒数转化为程序中的日期对象, 再输出
var myDate = new Date(ms)- 两个日期对象可相减 -> 得到毫秒差
-
-
复制一个日期对象
- 为什么: 日期的计算只能直接修改原日期
- 后果: 计算后, 原日期无法保存
- 解决: 如果希望同时保存开始时间和结束时间, 都要先将开始时间复制一份, 再用副本计算结束时间
- 如何:
var myDate = new Date(originalDate)
-
-
API: 3 句话- 单位:
-
年:
FullYear/ 月:Month/ 日:Date/ 星期几:Day/ 时:Hours/ 分:Minutes/ 秒:Seconds/ 毫秒:Milliseconds
-
- 每个单位都有一对儿
get单位()/set单位()方法date.get单位(): 获取指定单位的值date.set单位(): 设置指定单位的值- 特例:
Day没有set单位()方法
- 命名: 1. 年 / 月 / 日 / 星期没有
s结尾 2. 时 / 分 / 秒 / 毫秒都有s结尾 - 取值范围:
FullYear: 和现实中年份一致month: 0 ~ 11- 现实中: 1 ~ 12 -> 计算机中的月份值, 比现实中少 1 -> 需要修正
Date: 1 ~ 31 -> 和现实中的日一样Date: 0 ~ 6- 现实: 日 ~ 六 -> 和现实中的星期一样
Hours: 和现实中的时一样Minutes/Seconds: 0 ~ 59 和现实中的分 / 秒一样
- 单位:
-
日期计算:
- 两日期对象可直接相减计算时间差(
ms差 ) - 对任意单位做加减: 3 步 -> 以日为例
- 取值:
var date = now.getDate() - 做加减:
date += 30 - 放回去:
now.setDate(date)setDate会自动调整进制
- 简写:
now.setDate(now.getDate() + 30)
- 取值:
- 问题:
setDate直接修改原日期对象, 无法保留开始时间- 解决: 在计算前, 都要先将开始时间复制一个副本, 再用副本计算结束时间
- 两日期对象可直接相减计算时间差(
-
转字符串:
String(date): 将date转为当地时间的完整格式date.toLocaleString(): 将date转化为当地时间简化版格式date.toLocaleDateString(): 将date转化为当地时间简化版格式, 仅保留日期部分date.toLocaleTimeString(): 将date转化为当地时间简化版格式, 仅保留时分秒部分date.toGMTString(): 将date转化为 0 时区国际标准时间