创建和类型判断
var date = new Date();
console.log(date); // Fri Jun 01 2018 11:10:58 GMT+0800 (CST)
typeof date; // "object"
date instanceof Date; // true
Object.prototype.toString.call(date); // "[object Date]"
方法
静态方法
- now , 返回当前时间的 unix 时间戳, 共 13 位数, 单位为毫秒.
主要可以通过转时间戳便于计算, 比如计算两天之间的间隔, 或者用于倒计时.
var d = Date.now(); // 例如: 1527822979145
// 和 getTime 效果一直
var d2 = new Date().getTime() // 例如: 1527822979145
// 1.通过 unix 时间戳转 Date 对象
var date = new Date(1527822979145);
- parse , 将日期格式转成 unix 时间戳格式
var date = '2017/12/1'
// 转 unix 时间戳
// 1.
var d1 = new Date(date).getTime();
console.log(d1); // 1512057600000
// 2.
var d2 = Date.parse(date);
console.log(d2)
// parse 能转的格式
Date.parse('2017/12/11')
Date.parse('2017-12-11') // ios 不支持
Date.parse('2017.12.11 20:20:20')
Date.parse(new Date())
// 不支持的格式
Date.parse(); // NaN
Date.parse(Date.now()); // NaN
Date.parse('1512057600000') // NaN
Date.parse(1512057600000) // NaN
prototype 上方法
prototype 上的方法都是供 new Date() 的实例调用
- getTime, 获取时间的 unix 时间戳
var d = new Date('2018.6.1 14:30:30');
d.getTime(); // 1527834630000
- 获取年,月,日,时,分,秒, 星期
var d = new Date('2018.6.1 14:30:30')
console.log(d.getFullYear() + '年'); // 2018年
console.log(d.getMonth() + 1 + '月'); // 6月
console.log(d.getDate() + '日'); // 1日
console.log(d.getHours() + '时'); // 14时
console.log(d.getMinutes() + '分'); // 30分
console.log(d.getSeconds() + '秒'); // 32秒
console.log(d.getMilliseconds() + '毫秒'); // 100毫秒
console.log('星期' + d.getDay()); // 星期5
- toJSON , 将 Date 类型转成字符串类型 => 字符串
var d = new Date('2018.6.1 14:30:30')
var dStr = d.toJSON();
console.log(dStr); // '2018-06-01T06:30:30.000Z'
var d2 = new Date();
d2.toJSON(); // 会有时区差
- UTC 各种相关, 未使用过, 这里暂略过.
应用
- 到指定时间执行回调
function waitUtil(date, callback) {
date = typeof date === 'string'
? new Date(date.replace(/-/g, '/'))
: date;
var dateTime = date.getTime();
var dateNow = Date.now();
var millisecond = dateTime - dateNow;
if (millisecond < 0) {
return false;
}
setTimeout(callback, millisecond);
}
waitUtil('2018-06-01 15:29:00', function () {
console.log(1)
})
- 倒计时
function getLeaveTime(endTime) {
var leaveSec = (Date.parse(endTime) - Date.now()) / 1000;
return {
days: parseInt(leaveSec / (60 * 60 * 24)),
hours: parseInt(leaveSec / (60 * 60)) % 24,
mins: parseInt(leaveSec / (60)) % 60,
sec: parseInt(leaveSec / (60)) % 60,
}
}
console.log(getLeaveTime('2018-06-02 08:00:00'))
- 求两个日期中相隔天数
function getDistance(day1,day2){
var day1_unix = Date.parse(day1);
var day2_unix = Date.parse(day2);
var timeDistance = Math.abs(day1_unix-day2_unix);
return Math.ceil(timeDistance/(1000*60*60*24));
}
注意
- 时区的关系 , 部分方法( toJSON ) 获取时会有减去时区的偏移
- 在 ios 中不支持字符串转日期时包含
-
, 需将-
替换成/
;