在Web前端开发项目过程中,对于日期的一些处理,已经很常见了,比如获取当前地区日期、日期格式转换、时间倒计时,模拟钟表等功能。都会用到日期Date一些属性方法,接下来我们简单聊聊吧。
首先我们必须熟悉Date的定义和一些属性
了解Date
Date 对象用于处理日期与时间。
创建 Date 对象: new Date()
以下四种方法同样可以创建 Date 对象:
var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
Date 对象属性
| 属性 | 描述 | |:------------|:----------------------| | constructor | 返回对创建此对象的 Date 函数的引用。 | | prototype | 使您有能力向对象添加属性和方法。 |
Date 对象方法
Date可以使用很多方法,在这里不多说,直接列表走一波。
| 方法 | 描述 |
|:---------------------|:-----------------------------------------------------------------------------------------------|
| getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 |
| getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6)。 |
| getFullYear() | 从 Date 对象以四位数字返回年份。 |
| getHours() | 返回 Date 对象的小时 (0 ~ 23)。 |
| getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
| getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
| getMonth() | 从 Date 对象返回月份 (0 ~ 11)。 |
| getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
| getTime() | 返回 1970 年 1 月 1 日至今的毫秒数。 |
| getTimezoneOffset() | 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 |
| getUTCDate() | 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。 |
| getUTCDay() | 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。 |
| getUTCFullYear() | 根据世界时从 Date 对象返回四位数的年份。 |
| getUTCHours() | 根据世界时返回 Date 对象的小时 (0 ~ 23)。 |
| getUTCMilliseconds() | 根据世界时返回 Date 对象的毫秒(0 ~ 999)。 |
| getUTCMinutes() | 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 |
| getUTCMonth() | 根据世界时从 Date 对象返回月份 (0 ~ 11)。 |
| getUTCSeconds() | 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。 |
| getYear() | 已废弃。 请使用 getFullYear() 方法代替。 |
| parse() | 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。 |
| setDate() | 设置 Date 对象中月的某一天 (1 ~ 31)。 |
| setFullYear() | 设置 Date 对象中的年份(四位数字)。 |
| setHours() | 设置 Date 对象中的小时 (0 ~ 23)。 |
| setMilliseconds() | 设置 Date 对象中的毫秒 (0 ~ 999)。 |
| setMinutes() | 设置 Date 对象中的分钟 (0 ~ 59)。 |
| setMonth() | 设置 Date 对象中月份 (0 ~ 11)。 |
| setSeconds() | 设置 Date 对象中的秒钟 (0 ~ 59)。 |
| setTime() | setTime() 方法以毫秒设置 Date 对象。 |
| setUTCDate() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 |
| setUTCFullYear() | 根据世界时设置 Date 对象中的年份(四位数字)。 |
| setUTCHours() | 根据世界时设置 Date 对象中的小时 (0 ~ 23)。 |
| setUTCMilliseconds() | 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 |
| setUTCMinutes() | 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。 |
| setUTCMonth() | 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 |
| setUTCSeconds() | setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。 |
| setYear() | 已废弃。请使用 setFullYear() 方法代替。 |
| toDateString() | 把 Date 对象的日期部分转换为字符串。 |
| toGMTString() | 已废弃。请使用 toUTCString() 方法代替。 |
| toISOString() | 使用 ISO 标准返回字符串的日期格式。 |
| toJSON() | 以 JSON 数据格式返回日期字符串。 |
| toLocaleDateString() | 根据本地时间格式,把 Date 对象的日期部分转换为字符串。 |
| toLocaleTimeString() | 根据本地时间格式,把 Date 对象的时间部分转换为字符串。 |
| toLocaleString() | 根据本地时间格式,把 Date 对象转换为字符串。 |
| toString() | 把 Date 对象转换为字符串。 |
| toTimeString() | 把 Date 对象的时间部分转换为字符串。 |
| toUTCString() | 根据世界时,把 Date 对象转换为字符串。 实例: var today = new Date();var UTCstring = today.toUTCString();
|
| UTC() | 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。 |
| valueOf() | 返回 Date 对象的原始值。 |
了解完上面内容,我们一起来看下实例
实例1 - 获取时间
下面是关于获取时间的几个小例子:
//本月有多少天
var oDate=new Date();
oDate.setMonth(oDate.getMonth()+1);
oDate.setDate(0);
alert(oDate.getDate());
//本月第一天是周几
ar oDate=new Date();
oDate.setDate(1);
alert(oDate.getDay())
//本月最后一天是周几
var oDate=new Date();
oDate.setMonth(oDate.getMonth()+1);
oDate.setDate(0);
alert(oDate.getDay());
实例2 - 实现倒计时功能
这个功能比较常见,比如我们在开发活动页面的时候,就会用到活动截止之前的倒计时显示效果,废话不多说,上DEMO。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>实现倒计时功能 - Web前端之家https://www.jiangweishan.com/</title>
<style>
div{
width: 500px;
margin: 200px 400px;
font-size: 30px;
font-family: 新宋体;
text-align: center;
}
</style>
</head>
<body>
<div></div>
</body>
<script>
var oDay=new Date('2020/8/1');//获取标准的时间
var oTime=new Date();
var oJu=parseInt((oDay.getTime()-oTime.getTime())/1000);//获取1970年1月1日到五一总共有多少秒
var Day=parseInt(oJu/86400);//获取距离五一还有多少天
var yu=oJu%86400;
//获取剩下的时分秒
var h=parseInt(yu/3600);
var m=parseInt(yu%3600/60);
var s=yu%3600%60;
var oDiv=document.getElementsByTagName('div')[0];
//设置字符串拼接的变量
function toDub(n) {
if (n<10){return '0'+n}
else {return n}
}
oDiv.innerHTML=`距离五一长假放假时间<br>倒计时:${toDub(Day)}天${toDub(h)}时${toDub(m)}分${toDub(s)}秒`;
//设置一秒钟自动刷新一次页面
setTimeout(function () {
window.location.reload()
},1000);
</script>
</html>
说明:我们可以设置oDay属性为您的活动截止日期。
实例3 - 根据当前区域实现时钟效果
这个效果大家可以学下,其实就是一个手表功能。
function date(){
var date = new Date();
var ymd = date.getYear()+1900+"/"+(parseInt(date.getMonth())+1)+"/"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+":"+date.getSeconds();
document.getElementById("date").innerHTML = ymd;
setTimeout("date()",1000);
}
我们定义一个函数,然后循环,在HTML里调用显示:
<div id="date"></div>
最终效果就是类似这样的:
2020/07/22 13:10:11
实例4- 时间格式转换
这个功能,我们在处理API接口的时候经常用到,因为前台显示的时间格式往往跟后台给的API不同,有时候后台开发人员也不会帮你改的,所以这时候我们自己想办法去处理转换。这里介绍一个方法:format()。如何用呢?
new Date().format("YYYY-mm-dd")
这是一个很简单的例子。但是平常很多地方会用到,需要封装下咯。
Date.prototype.format = function(format)
{ var o = { "M+" : this.getMonth()+1, //month
"d+" : this.getDate(), //day
"h+" : this.getHours(), //hour
"m+" : this.getMinutes(), //minute
"s+" : this.getSeconds(), //second
"q+" : Math.floor((this.getMonth()+3)/3), //quarter
"S" : this.getMilliseconds() //millisecond } if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
(this.getFullYear()+"").substr(4 - RegExp.$1.length)); for(var k in o)if(new RegExp("("+ k +")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length==1 ? o[k] :
("00"+ o[k]).substr((""+ o[k]).length)); return format;
}
然后调用此方法:
var d1 = new Date();
d1.format('yyyy-MM-dd');var d2 = new Date();
d2.format('yyyy-MM-dd');
说明:format()方法据说在es6已经被干掉了,要用的话,需要调用下第三方插件库,大家记住咯。
总结
对于Date的一些处理就说这么多,其实还有很多玩法,大家可以去研究下咯,如果您有任何问题可以加群或者留言。