javascript 对象类型之 - Date

创建和类型判断

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 中不支持字符串转日期时包含 - , 需将 - 替换成 / ;

猜你喜欢

转载自blog.csdn.net/haokur/article/details/80536885