【重温基础】7.时间对象
栏目: JavaScript · 发布时间: 6年前
内容简介:本文是系列目录:前置知识:
本文是 重温基础 系列文章的第七篇。 今日感受:做好自律。
系列目录:
- 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理)
- 【重温基础】1.语法和数据类型
- 【重温基础】2.流程控制和错误处理
- 【重温基础】3.循环和迭代
- 【重温基础】4.函数
- 【重温基础】5.表达式和运算符
- 【重温基础】6.数字
本章节复习的是JS中的时间对象,一些处理的方法。
前置知识:
JavaScript中的时间是以1970年1月1日00:00:00以来的毫秒数来储存数据类型。
Data
对象的范围是相对距离UTC1970年1月1日的前后100,000,000天。
创建一个时间对象:
let d = new Date([params]); 复制代码
参数 params
可以是:
- 无参数:默认创建今天的日期和时间。
- 一个符合以下格式的表示日期的字符串:
"月 日, 年 时:分:秒."或者"年月日 时分秒"
let d = new Date("2018-12-20"); 复制代码
如果你省略时、分、秒,那么他们的值将被设置为0。
- 一个年,月,日的整型值的集合:
let d = new Date(2018, 12, 20); 复制代码
- 一个年,月,日,时,分,秒的集合:
let d = new Date(2018, 12, 20, 23, 20, 10); 复制代码
这里Date对象涉及到的方法特别多,请移步 W3school JavaScript Date 对象
1.Date对象的方法
常用处理的方法有以下几类:
-
"
set
":用于设置Date对象的日期和时间的值。 -
"
get
":用去获取Date对象的日期和时间的值。 -
"
to
":用于返回Date对象的字符串格式的值。 -
"
parse
和UTC
":用于解析Date字符串。
需要注意的Date对象的一些数值问题:
- 秒/分: 0 - 59;
- 时: 0 - 23;
- 星期: 0(周日) - 6(周六)
- 日期: 1 - 31
- 月份: 0(一月) - 11(十二月)
- 年份: 从1900开始的年数
例如:
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个小时。
2.使用Date对象
2.1设置日期
为一个时间对象设置指定日期(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); // 先获取当天的日期,再设置到指定天数以后 复制代码
2.2比较时间
通常情况下,像下面这样简单比较:
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 复制代码
2.3计算N天后星期几
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('请输入正确数字!'); } } 复制代码
2.4 格式化日期
常见的日期格式化为字符串的方法有这些:
-
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()); 复制代码
2.5 获取某年某月的天数
这里有个小技巧,若给 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(); } 复制代码
2.6 获取上个月/下个月日期("yyyy-mm-dd")
传入参数的格式"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" 复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Algorithmic Beauty of Plants
Przemyslaw Prusinkiewicz、Aristid Lindenmayer / Springer / 1996-4-18 / USD 99.00
Now available in an affordable softcover edition, this classic in Springer's acclaimed Virtual Laboratory series is the first comprehensive account of the computer simulation of plant development. 150......一起来看看 《The Algorithmic Beauty of Plants》 这本书的介绍吧!