Date对象是JavaScript提供的日期和时间的操作接口。
JavaScript的时间是由世界标准时间(UTC)1970年1月1日开始,用毫秒计时,一天由86,400,000毫秒组成。Date对象的范围是-100,000,000天至100,000,000天(等效的毫秒值)。
关于Date,一般使用的是moment.js库。
Date的静态方法
-
Date.now():返回当前距离1970年1月1日00:00:00的毫秒数。
TIM图片20190219100123.png -
Date.parse():用来解析日期字符串,返回距离1970年1月1日00:00:00的毫秒数。如果解析失败,返回NaN。
TIM图片20190219100526.png -
Date.UTC():返回的是UTC的时间。该方法介绍呀年、月、日等变量作为参数,返回距离1970年1月1日00:00:00的毫秒数。
默认情况下,Date对象返回的都是当前时区的时间。
UTC:世界统一时,标准时。
TIM图片20190219101157.png
Date()的动态方法
-
Date():Date()函数可以直接调用,返回一个但钱日期和时间的字符串,这时候是否有参数结果一样。
TIM图片20190219101504.png -
new Date():使用Date()构造函数创建一个实例。实例时间为当前时间。
TIM图片20190219101612.png - get方法:
var d = new Date()
d.getTime() //返回实例对象距离1970年1月1日00:00:00对应的毫秒数
d.getDate() //返回实例对象对应每个月的几号(从1开始)
d.getDay() //返回星期,星期日为0,星期一为1,以此类推
d.getFullYear() //返回四位的年份
d.getMonth() //返回月份(0表示1月,11表示12月)
d.getHours() //返回小时(0~23)
d.getMilliseconds() //返回毫秒(0-999)
d.getMinutes() //返回分钟(0-59)
d.getSeconds() //返回秒(0-59)
TIM图片20190219102743.png
- set方法
Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳
Date.prototype.setFullYear(year [, month, date]):设置四位年份
Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)
Date.prototype.setMilliseconds():设置毫秒(0-999)
Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)
Date.prototype.setMonth(month [, date]):设置月份(0-11)
Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)
Date.prototype.setTime(milliseconds):设置毫秒时间戳
- Date.toString():返回一个完整的时间字符串
var d = new Date()
console.log(d.toString())
TIM图片20190219103125.png
-
toLocaleString():展示现在的时间,当前地区的时间表示
TIM图片20190219123005.png
toLocaleString是由浏览器操作系统决定的,不是由JS决定的。它是不可靠的。
- 时间戳:当前时间距离1970年1月1号00:00:00的时间距离就是时间戳。时间戳是绝对的,与地区无关。UTC时间才是标准时间。
-
可以表示1970年1月1号0:00:00之前的时间,因为时间戳可以是负值。
TIM图片20190219123510.png
实例:
- 写一个函数getChIntv,获取从当前时间到指定日期的间隔时间。
function getChIntv(datestr){
var targetDate = new Date(datestr)//得到了目标时间的时间对象
var curDate = new Date()//得到了当前时间的时间对象
var offset = Math.abs(targetDate - curDate)//防止得到的结果为一个负值
var totalSeconds = Math.floor(offset/1000)
var second = totalSeconds%60
var totalMinutes = Math.floor((offset/1000)/60)
var minutes = totalMinutes%60
var totalHours = Math.floor(totalMinutes/60)
var hours = totalHours%24
var totalDays = Math.floor(totalHours/24)
return totalDays + '天' + hours + '小时' + minutes + '分钟' + second + '秒'
}
- 写一个函数,判断是否是闰年
判断二月是否有29号,有就是闰年,无就不是。
function xx(){
new d = new Date(year,1,29)
return d.getDate() === 29
}
- 把hh-mm-dd格式数字日期改成中文日期
function getChsDate(date){
var result = [];
var str = ['零','一','二','三','四','五','六','七','八','九','十','十一','十二','十三','十四','十五','十六','十七','十八','十九','二十','二一','二二','二三','二四','二五','二六','二七','二八','二九','三十','三一'];
var arr = date.splite('-');
var yrar = arr[0];
month = arr[1];
day = arr[2];
year = year.splite('').map(function (value){
return strs[+value];
}).join('');
month = strs[+month];
day = strs[+day];
return year + '年' + month + '月' + day + '日';
}
- 写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:
刚刚( t 距当前时间不到1分钟时间间隔)
3分钟前 (t距当前时间大于等于1分钟,小于1小时)
8小时前 (t 距离当前时间大于等于1小时,小于24小时)
3天前 (t 距离当前时间大于等于24小时,小于30天)
2个月前 (t 距离当前时间大于等于30天小于12个月)
8年前 (t 距离当前时间大于等于12个月)
function friendlyDate(date){
var offset = +new Date - time;
var seconds = 1000,
minutes = seconds * 60,
hours = minutes * 60,
days = hours * 24,
months = days * 30,
years = months * 12;
var t;
if(offset >= years){
t = parseInt(offset / years);
return t + '年前';
}
else if(offset >= months){
t = parseInt(offset / months);
return t + '个月前';
}
else if(offset >= days){
t = parseInt(offset / days);
return t + '天前';
}
else if(offset >= hours){
t = parseInt(offset / hours);
return t + '小时前';
}
else if(offset >= minutes){
t = parseInt(offset / minutes);
return t + '分钟前';
}
else(offset >= seconds){
return '刚刚';
}
}
网友评论