在项目里, 日期和时间的不同显示格式经常会用到, 于是趁着周末来学习一番, 这篇文章把犀牛书上处理日期和时间对象的API记录了一下, 以及项目里用到了moment.js日期处理类库(参考官网: http://momentjs.cn/), 这个用起来真的很方便。
另外由于刚开始也不了解UTC(国际协调时间)和GMT(格林尼治标准时间)的区别, 百度了一番, 可参考这篇博文(解释得很清楚): https://www.cnblogs.com/qiuyi21/archive/2008/03/04/1089456.html, 如果对时间没有要求太精细, UTC=GMT。
一、犀牛书[第六版]中Date()构造函数以及相关的API_P733~755:
返回的都是Date对象相应的值, 例子是: **2018年12月8日 星期六 17点42分55秒**
var now = new Date();
now; // => Sat Dec 08 2018 17:42:55 GMT+0800 (中国标准时间)
now.getDate(); // => 8, 返回Date对象的日期值, 8号
now.getDay(); // => 6, 返回星期值, 表示星期几, 这里是星期六, 注意0表示星期日, 1 ~6分别表示星期一至星期六
now.getFullYear(); // => 2018, 返回年份值, 完整4位数的格式, 建议使用这个API
now.getHours(); // => 17, 返回小时值
now.getMilliseconds(); // => 372, 返回毫秒值
now.getMinutes(); // => 42, 返回分钟值
now.getMonth(); // => 11, 返回月份值, 这里是12月!! 月份也是个特殊值, 介于0 ~11表示1月 ~12月
now.getSeconds(); // => 55, 返回秒数值,
now.getTime(); // => 1544262175372, 返回毫秒值, 注: 这个**没有getUTCTime()方法**, 因为这个值和时区无关
now.getTimezoneOffset(); // => -480, 返回当前日期的本地表示与UTC表示之间相差的**分钟数**, 注意返回值依赖于指定日期的夏令时是否有效
now.getYear(); // => 118, 返回年分值, 此方法已过时, 请使用getFullYear();
设置/更改时间, get和set是相对应的, 在日期对象里面也是一样, 以上例子里面除了getDay()和getTimezoneOffset()没有set方法, 其他都是有相应的set方法的, 直接将get替换成set即可用, 如: dateObj.setDate();
例子时间是**2018年12月8日 星期六 18点21分14秒**
var now = new Date();
now; // => Sat Dec 08 2018 18:21:14 GMT+0800 (中国标准时间)
now.setDate(15);
now; // => Sat Dec 15 2018 18:21:14 GMT+0800 (中国标准时间), 8号修改成了15号.
var now = new Date();
now; // => Sat Dec 08 2018 18:21:14 GMT+0800 (中国标准时间)
now.setDate(15);
now; // => Sat Dec 15 2018 18:21:14 GMT+0800 (中国标准时间)
转换的时间例子是**2018年12月8日 星期六 18点21分14秒**
now.toDateString(); // => "Sat Dec 15 2018", 返回一个表示日期部分的字符串, 使用本地时区
now.toGMTString(); // => "Sat, 15 Dec 2018 10:21:14 GMT", 将Date转换为字符串, 已弃用, 建议使用toUTCString().
now.toISOString(); // => "2018-12-15T10:21:14.743Z", 将Date转字符串, 以ISO-8601标准和以时区为"Z"的UTC时间表示形式
now.toJSON(); // => "2018-12-15T10:21:14.743Z", 将Date对象JSON序列化, 返回值和toISOString()一样
now.toLocaleDateString(); // => "2018/12/15", 返回一个表示日期部分的字符串, 使用本地时区, 本地时间格式
now.toLocaleString(); // => "2018/12/15 下午6:21:14", 将Date转换为字符串
now.toLocaleTimeString(); // => "下午6:21:14", 返回一个表示时间部分的字符串
now.toString(); // => "Sat Dec 15 2018 18:21:14 GMT+0800 (中国标准时间)", 本地时区将Date转换为字符串
now.toTimeString(); // => "18:21:14 GMT+0800 (中国标准时间)", 返回一个表示时间部分的字符串
now.toUTCString(); // => "Sat, 15 Dec 2018 10:21:14 GMT", 用世界时间将Date转换为字符串
now.valueOf(); // => 1544869274743, 将Date转为对应的内部毫秒格式
var timestamp = Date.parse("2018 12 8");
timestamp; // => 1544198400000, 返回1970/1/1 午夜距离该日期时间的毫秒数。
var year = timestamp/(1000*60*60*24*365);
year; // => 48.9662100456621, 从2018到1970年相差48年
var y = 2018 - 1970;
y; // => 48, 只是为了验证上一步
var time = "2018-08-06 13:21:17";
var s = new Date(time);
s; // => Mon Aug 06 2018 13:21:17 GMT+0800 (中国标准时间), 为了Date.parse()的使用进行转换
var stamp = Date.parse(s);
stamp; // => 1533532877000, 2018年8月6日 13点21分17秒到1970年1月1日午夜的毫秒差
var cha = timestamp - stamp;
cha; // => 10665523000; 2018年12月8日和2018年8月6日之间的毫秒差
下面都是2018年12月8日和2018年8月6日之间的差值
var chaYear = cha/(1000*60*60*24*365);
chaYear; // => 0.33820151572805685, 年差
var chaMonth = cha/(1000*60*60*24*30);
chaMonth; // => 4.114785108024692, 月差
var chaDate = cha/(1000*60*60*24);
chaDate; // => 123.44355324074074, 天数差
如果想继续算出时差/分差/秒差可根据相应的规律计算即可。注: 1000毫秒 = 1秒
二、moment.js的使用:
前提: 需要在项目中下载引入或安装方可使用, 这里为了方便阅读, 把官网首页的例子贴过来, 更多处理需要阅读相关文档来处理: http://momentjs.cn/docs/