本文是 重温基础 系列文章的第七篇。 今日感觉:作好自律。html
系列目录:前端
本章节复习的是JS中的时间对象,一些处理的方法。git
前置知识:
JavaScript中的时间是以1970年1月1日00:00:00以来的毫秒数来储存数据类型。
Data
对象的范围是相对距离UTC1970年1月1日的先后100,000,000天。
建立一个时间对象:github
let d = new Date([params]);
复制代码
参数params
能够是:浏览器
"月 日, 年 时:分:秒."或者"年月日 时分秒"微信
let d = new Date("2018-12-20");
复制代码
若是你省略时、分、秒,那么他们的值将被设置为0。ide
let d = new Date(2018, 12, 20);
复制代码
let d = new Date(2018, 12, 20, 23, 20, 10);
复制代码
这里Date对象涉及到的方法特别多,请移步W3school JavaScript Date 对象函数
经常使用处理的方法有如下几类:post
set
":用于设置Date对象的日期和时间的值。get
":用去获取Date对象的日期和时间的值。to
":用于返回Date对象的字符串格式的值。parse
和UTC
":用于解析Date字符串。须要注意的Date对象的一些数值问题:ui
例如:
let d = new Date('2018-12-10');
let d1 = d.getMonth(); // 11
let d2 = d.getFullYear(); // 2018
复制代码
获取今年剩下的天数:
let d = new Date();
let e = new Date(2018, 11, 31, 23, 59, 59, 999); // 设置年月日时分秒
e.setFullYear(d.getFullYear); // 设置为今年
let m = 24 * 60 * 60 * 1000; // 每日毫秒数
let result = (e.getTime() - d.getTime()) / m;
result = Math.round(result); // 返回今年剩余天数
复制代码
这里Date对象涉及到的方法特别多,请移步W3school JavaScript Date 对象
注意:
格林尼治标准时间(GMT)英国、爱尔兰、冰岛和葡萄牙属于该时区。这个时区与中国北京时间的时差是8个小时,也就是说比北京时间晚8个小时。
为一个时间对象设置指定日期(2018年12月20日),注意这里:和前面说的同样,12月在JS的Date对象中,是用11
表示。
let d = new Date();
d.setFullYear(2018,11,20);
复制代码
设置时间对象10
天之后:
let d = new Date();
d.setDate(d.getDate() + 10); // 先获取当天的日期,再设置到指定天数之后
复制代码
一般状况下,像下面这样简单比较:
let d = new Date();
let e = new Date();
d.setFullYear(2018,10,10);
let r = d > e ? 'good' : 'nice' ; // nice
复制代码
还能够比较两个日期相差多少天:
let d1 = new Date('2018-10-10');
let d2 = new Date('2018-11-11');
let d3 = (d2 - d1) / (1000 * 60 * 60 * 24); // 32
复制代码
function d (num){
if(typeof Number(num) === 'number'){
let d1 = new Date();
let d2 = d1.setDate(d1.getDate() + Number(num));
let n = new Date(d2).getDay();
let s = '';
switch (n){
case 0 :
s = "星期天";
break;
case 1 :
s = "星期一";
break;
case 2 :
s = "星期二";
break;
case 3 :
s = "星期三";
break;
case 4 :
s = "星期四";
break;
case 5 :
s = "星期五";
break;
case 6 :
s = "星期六";
break;
}
return s;
}else {
alert('请输入正确数字!');
}
}
复制代码
常见的日期格式化为字符串的方法有这些:
toDateString()
——以特定于实现的格式显示星期几、月、日和年;
toTimeString()
——以特定于实现的格式显示时、分、秒和时区;
toLocaleDateString()
——以特定与地区的格式显示星期几、月、日和年;
toLocaleTimeString()
——以特定于实现的格式显示时、分、秒;
toUTCString()
——以特定于实现的格式完整的UTC日期。
获取并格式化日期:年-月-日:
function d (date){
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}
d(new Date()); // "2018-12-20"
复制代码
日期字符串转为 年-月-日:
function d (str){
return new Date(Date.parse(str.replace(/-/g, '/')));
// 或者
// return new Date(str.replace(/-/g, '/'));
}
复制代码
获取当前星期几:
let d = "今天是星期" + "日一二三四五六".charat(new Date().getDay());
复制代码
这里有个小技巧,若给new Date()
传入一个如aaaa/aa/0
参数时,能够获得aa
月的前一个月的最后一天,如传入2018/12/0
会获得2018/11/30
。
值得注意的是: 在Chrome浏览器上并不支持,会返回Invalid Date
致使结果为NaN
,可是咱们可使用aaaa,aa,0
形式做为参数,下面分别写出这两种:
// aaaa/aa/0形式 只要传入年和月
function d (y, m){
m = parseInt(m, 10) + 1;
let r = new Date(y + '/' + m + '/0');
return r.getDate();
}
// aaaa,aa,0形式 只要传入年和月
function d (y, m){
m = parseInt(m, 10) + 1;
let r = new Date(y, m, 0);
return r.getDate();
}
复制代码
传入参数的格式"yyyy-mm-dd",其实也能够是Date()对象,你们能够自行尝试。
// 上个月 date格式"yyyy-mm-dd"
function my_date (date){
let arr = date.split('-');
let y = arr[0] , m = arr[1], d = arr[2]; // 获取当前的年月日
// ES6语法 let [y,m,d] = arr;
let day = new Date(y,m,0);
day = day.getDate(); // 获取当前月份的天数
let y2 = y, m2 = parseInt(m) - 1;
if(m2 == 0){
y2 = parseInt(y2) -1;
m2 = 12;
}
let d2 = d, day2 = new Date(y2, m2, 0);
day2 = day2.getDate();
if(d2 > day2){
d2 = day2;
}
if(m2 < 10){
m2 = '0' + m2;
}
return y2 + '-' + m2 + '-' + d2;
}
my_date('2018-1-20'); //"2017-12-20"
复制代码
下个月的计算方法也是类似:
// 上个月 date格式"yyyy-mm-dd"
function my_date (date){
let arr = date.split('-');
let y = arr[0] , m = arr[1], d = arr[2]; // 获取当前的年月日
let day = new Date(y,m,0);
day = day.getDate(); // 获取当前月份的天数
// 和计算上个月的区别
let y2 = y, m2 = parseInt(m) + 1;
if(m2 == 13){
y2 = parseInt(y2) + 1;
m2 = 1;
}
let d2 = d, day2 = new Date(y2, m2, 0);
day2 = day2.getDate();
if(d2 > day2){
d2 = day2;
}
if(m2 < 10){
m2 = '0' + m2;
}
return y2 + '-' + m2 + '-' + d2;
}
my_date('2018-12-20'); // "2019-01-20"
复制代码
1.MDN 数字和日期
2. JS日期Date详解与实例扩展
本部份内容到这结束
Author | 王平安 |
---|---|
pingan8787@qq.com | |
博 客 | www.pingan8787.com |
微 信 | pingan8787 |
每日文章推荐 | github.com/pingan8787/… |
JS小册 | js.pingan8787.com |
欢迎关注个人微信公众号【前端自习课】