js Date日期和时间的处理

在项目里, 日期和时间的不同显示格式经常会用到, 于是趁着周末来学习一番, 这篇文章把犀牛书上处理日期和时间对象的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:

  1. new Date() // 返回当前日期和时间, 创建的都是Date对象
    在这里插入图片描述
    注: 这里需要注意month月份参数, 介于0(1月) ~11(12月)之间的整数。
    在这里插入图片描述
  2. Date()方法只能在Date对象上调用, 其他类型对象调用会报错):
    注: []中括号表示可选, 即可写可不写, 写上是表示使用世界时间(UTC或GMT), 不写表示使用本地时间, 如: dateObj.get[UTC]Date() 表示本地或世界时间
    获取时间的值, 看下面代码例子:
返回的都是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号.
  1. 日期和时间对象的转换:
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转为对应的内部毫秒格式
  1. 静态方法, Date.now() 返回当前时间, 自纪元(1970/1/1 00:00:00, 我们在控制台打印出1970/1/1 08:00:00 GMT+0800是因为我们是东八区)开始后的毫秒数; Date.parse() 解析一个日期及时间的字符串表示, 返回该日期的内部毫秒表示(下面详解这个API), Date.UTC() 返回指定的UTC日期及时间的毫秒表示(4位数的年, 月和日参数必需)
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/

  1. 日期格式化
    在这里插入图片描述
  2. 相对时间
    在这里插入图片描述
  3. 日历时间
    在这里插入图片描述
  4. 多语言支持
    在这里插入图片描述
    上面的小结如果有不对的地方, 欢迎读者们指出沟通交流~ 感谢感谢!
  • 12
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值