Date 对象属性和方法

Date 对象

 

在 JavaScript 中, Date 对象用于处理日期和时间。
它提供了获取、设置日期时间等相关操作。
创建一个 Date 对象的方法:

  • var date = new Date()

 

Date 对象与其实例的属性和方法:

// Object.getOwnPropertyDescriptors(Date):
name                        : {value: "Date", writable: false, enumerable: false, configurable: true}
length                      : {value: 7, writable: false, enumerable: false, configurable: true}
prototype                   : {value: {…}, writable: false, enumerable: false, configurable: false}
UTC                         : {writable: true, enumerable: false, configurable: true, value: ƒ}
now                         : {writable: true, enumerable: false, configurable: true, value: ƒ}
parse                       : {writable: true, enumerable: false, configurable: true, value: ƒ}

// Object.getOwnPropertyDescriptors(Date.prototype):
constructor                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
toString                    : {writable: true, enumerable: false, configurable: true, value: ƒ}
toLocaleString              : {writable: true, enumerable: false, configurable: true, value: ƒ}
valueOf                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
Symbol(Symbol.toPrimitive)  : {writable: false, enumerable: false, configurable: true, value: ƒ}
getDate                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
getDay                      : {writable: true, enumerable: false, configurable: true, value: ƒ}
getFullYear                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
getHours                    : {writable: true, enumerable: false, configurable: true, value: ƒ}
getMilliseconds             : {writable: true, enumerable: false, configurable: true, value: ƒ}
getMinutes                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
getMonth                    : {writable: true, enumerable: false, configurable: true, value: ƒ}
getSeconds                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
getTime                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
getTimezoneOffset           : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCDate                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCDay                   : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCFullYear              : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCHours                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCMilliseconds          : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCMinutes               : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCMonth                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
getUTCSeconds               : {writable: true, enumerable: false, configurable: true, value: ƒ}
getYear                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
setDate                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
setFullYear                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
setHours                    : {writable: true, enumerable: false, configurable: true, value: ƒ}
setMilliseconds             : {writable: true, enumerable: false, configurable: true, value: ƒ}
setMinutes                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
setMonth                    : {writable: true, enumerable: false, configurable: true, value: ƒ}
setSeconds                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
setTime                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCDate                  : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCFullYear              : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCHours                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCMilliseconds          : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCMinutes               : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCMonth                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
setUTCSeconds               : {writable: true, enumerable: false, configurable: true, value: ƒ}
setYear                     : {writable: true, enumerable: false, configurable: true, value: ƒ}
toDateString                : {writable: true, enumerable: false, configurable: true, value: ƒ}
toGMTString                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
toISOString                 : {writable: true, enumerable: false, configurable: true, value: ƒ}
toJSON                      : {writable: true, enumerable: false, configurable: true, value: ƒ}
toLocaleDateString          : {writable: true, enumerable: false, configurable: true, value: ƒ}
toLocaleTimeString          : {writable: true, enumerable: false, configurable: true, value: ƒ}
toTimeString                : {writable: true, enumerable: false, configurable: true, value: ƒ}
toUTCString                 : {writable: true, enumerable: false, configurable: true, value: ƒ}

 

 

Date 对象方法描述

方法描述
Date.parse( ) 解析并返回日期和时间的字符串表示的内部毫秒表示日期。
Date.UTC( ) 返回指定的毫秒表示UTC日期和时间。

 

 

 

Date.prototype 对象方法描述

方法描述
Date() 返回今天的日期及时间。
getDate() 按照本地模式返回指定日期是哪日。
getDay() 按照本地模式返回指定日期是周几。
getFullYear() 按照本地模式返回指定日期是哪一年。
getMilliseconds() 按照本地模式返回指定日期是几毫秒。
getMinutes() 按照本地模式返回指定日期是几分。
getMonth() 按照本地模式返回指定日期的月份。
getSeconds() 按照本地模式返回指定日期是几秒。
getTime() 按照本地模式当前的格林威治时间。
getTimezoneOffset() 以分钟为单位返回时间偏差。
getUTCDate() 按照世界统一时间返回指定日期是几号。
getUTCDay() 按照世界统一时间返回指定日期是周几。
getUTCFullYear() 按照世界统一时间返回指定日的年份。
getUTCHours() 按照世界统一时间返回指定日期是几时。
getUTCMilliseconds() 按照世界统一时间返回指定日期的毫秒数。
getUTCMinutes() 按照世界统一时间返回指定日期的分钟数。
getUTCMonth() 按照世界统一时间返回指定日期的月份。
getUTCSeconds() 按照世界统一时间返回指定日期的秒数。
setDate() 按照本地模式设置日期。
setFullYear() 按照本地模式设置年份。
setHours() 按照本地模式设置小时。
setMilliseconds() 按照本地模式设置毫秒数。
setMinutes() 按照本地模式设置分钟数。
setMonth() 按照本地模式设置月份。
setSeconds() 按照本地模式设置秒数。
setTime() 按照格林威治格式设置毫秒数。
setUTCDate() 按照世界统一时间设置日期。
setUTCFullYear() 按照世界统一时间设置年份。
setUTCHours() 按照世界统一时间设置小时数。
setUTCMilliseconds() 按照世界统一时间设置毫秒数。
setUTCMinutes() 按照世界统一时间设置分钟数。
setUTCMonth() 按照世界统一时间设置月份。
setUTCSeconds() 按照世界统一时间设置秒数。
toDateString() 返回日期的字符串。
toLocaleDateString() 按照本地模式,返回日期的字符串。
toLocaleFormat() 使用格式字符串,将日期转换为一个字符串。
toLocaleString() 使用当前语言环境的约定将日期转换为一个字符串。
toLocaleTimeString() 返回日期的“时间”部分作为一个字符串,使用当前语言环境的约定。
toSource() 返回一个字符串代表一个等价的日期对象的来源,您可以使用这个值来创建一个新的对象。
toString() 返回一个字符串代表指定的日期对象。
toTimeString() 返回日期的“时间”部分以字符串形式。
toUTCString() 使用通用时间约定,将日期转换为一个字符串。
valueOf() 返回日期对象的原始值。

 

Date对象:封装一个时间点,提供操作时间的API。Date对象中封装的是从1970年1月1日0点至今的毫秒数。

创建Date对象的4种方式:

new Date(); // 创建当前时刻的日期与时间

new Date(value); // value:一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,表示自1970年1月1日00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒。请注意大多数 Unix 时间戳功能仅精确到最接近的秒。

new Date(dateString); // dateString:表示日期的字符串值。该字符串应该能被 Date.parse() 正确方法识别(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)。

new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]); 
// year
// 表示年份的整数值。 0到99会被映射至1900年至1999年,其它值代表实际年份。
// monthIndex
// 表示月份的整数值,从 0(1月)到 11(12月)!!!。
// day 可选
// 表示一个月中的第几天的整数值,从1开始。默认值为1。
// hours 可选
// 表示一天中的小时数的整数值 (24小时制)。默认值为0(午夜)。
// minutes 可选
// 表示一个完整时间(如 01:10:00)中的分钟部分的整数值。默认值为0。
// seconds 可选
// 表示一个完整时间(如 01:10:00)中的秒部分的整数值。默认值为0。
// milliseconds 可选
// 表示一个完整时间的毫秒部分的整数值。默认值为0。

 

日期分量:FullYear、Month、Date、Day、Hours、Minutes、Seconds、Milliseconds。
每一个日期分量都有一个getset方法(除了Day没有set方法),分别用于获取和设置时间对象。

日期的单位及范围:

年FullYear (无范围)
月Month (0~11, 0开始,没有12)
日Date (1~31, 和现实生活一样)
星期Day (0~6, 0是星期日,没有7)
时Hours (0~23. 0开始,没有24)
分Minutes (0~59)
秒Seconds (0~59)
毫秒MilliSeconds

 

Date 常用方法示例

var oDate = new Date();
console.log('当前:',oDate.toLocaleString())

var getTime = oDate.getTime();          //格林威治时间
var y = oDate.getFullYear();            // 年份
var mon = oDate.getMonth()+1;           //月份
var d = oDate.getDate();                //日期
var dw = oDate.getDay();                //星期几
var h = oDate.getHours();               //
var m = oDate.getMinutes();             //
var s = oDate.getSeconds();             //
var ms = oDate.getMilliseconds();       //毫秒

console.log('格林威治时间:',getTime)
console.log('年份:',y)
console.log('月份:',mon)
console.log('日期:',d)
console.log('星期:',dw)
console.log('时:',h)
console.log('分:',m)
console.log('秒:',s)
console.log('毫秒:',ms)
    

 

偶尔会用到的小方法:

// 不够两位数的补全,
function setTen (num) {
    // 注意确保num是正整数再使用,例子中非正整数一律原样返回,请根据业务实际情况进行更谨慎判断
    return num >= 0 && num < 10? '0'+ parseInt(num): num
    
}

// 传入星期几返回对应中文
function setDay (day) {
    // 注意day为0-6的数字!!!此处举例未对day判断
    var week = ['日', '一', '二', '三', '四', '五', '六'];
    return week[day]
}

var oDate = new Date();

var   mon = setTen(oDate.getMonth()+1);   //月份
var     d = setTen(oDate.getDate());      //日期
var     w = setDay(oDate.getDay());       //星期几
var     h = setTen(oDate.getHours());     //
var     m = setTen(oDate.getMinutes());   //
var     s = setTen(oDate.getSeconds());   //

console.log('月份:',mon)
console.log('日期:',d)
console.log('星期:',w)
console.log('时:',h)
console.log('分:',m)
console.log('秒:',s)

 

获得指定日期之前或之后的某个时间点 ( Fri Jan DD YYYY hh:mm:ss GMT+0800 (中国标准时间) )

  //  获得指定日期之前或之后的某个时间
  function getAfterDate(d,i,type) {
    var t = new Date(d)
    ////////////////////////////////////////////////////////////////////
    //    d (用于增减的日期)  合法参数:任何能被 new Date() 转化的日期 
    //    i (增减数量)       合法参数:正负整数 与 0                              
    // type (日期类型)       合法参数:
    //     年 : year、y、年
    //     月 : month、mon、月
    //     周 : week、w、周
    //     日 : day、d、天、日
    //     时 : hours、h、时、小时
    //     分 : minutes、m、分、分钟
    //     秒 : seconds、s、秒、秒钟
    //   毫秒 : milliseconds、ms、毫秒
    /////////////////////////////////////////////////////////////////////
    if (type == 'year' || type == 'y' || type == '年') {return new Date(t.setFullYear(t.getFullYear() + i))}
    if (type == 'month' || type == 'mon' || type == '月') {return new Date(t.setMonth(t.getMonth() + i))}
    if (type == 'week' || type == 'w' || type == '周') {return new Date(t.setDate(t.getDate() + i*7))}
    if (type == 'day' || type == 'd' || type == '天'|| type == '日') {return new Date(t.setDate(t.getDate() + i))}
    if (type == 'hours' || type == 'h' || type == '时') {return new Date(t.setHours(t.getHours() + i))}
    if (type == 'minutes' || type == 'm' || type == '分' || type == '分钟') {return new Date(t.setMinutes(t.getMinutes() + i))}
    if (type == 'seconds' || type == 's' || type == '秒' || type == '秒钟') {return new Date(t.setSeconds(t.getSeconds() + i))}
    if (type == 'milliseconds' || type == 'ms' || type == '毫秒') {return new Date(t.setMilliseconds(t.getMilliseconds() + i))}

    return '参数有误'
  }

  console.log('now: ',new Date()) //  当前时间
  console.log('y ',getAfterDate(new Date(),3,'年')) // 三年后
  console.log('m ',getAfterDate(new Date(),3,'月')) // 三个月后
  console.log('w ',getAfterDate(new Date(),3,'周')) // 三周后
  console.log('d ',getAfterDate(new Date(),-3,'天')) // 三天前
  console.log('h ',getAfterDate(new Date(),-1,'时')) // 一小时前
  console.log('s ',getAfterDate(new Date(),-30,'分')) // 三十分钟前
  console.log('m ',getAfterDate(new Date(),300,'秒')) // 三百秒钟后
  console.log('ms ',getAfterDate(new Date(),3000,'ms')) // 三千毫秒后

 

获得指定日期之前或之后的某个时间点的本地时间格式 ( YYYY/MM/DD 上午 hh:mm:ss )

  // 获得指定日期之前或之后的某个时间点的本地时间格式,各参数可先判空判值之类优化
  function getAfterLocalDate(d,i,type) {

    ////////////////////////////////////////////////////////////////////
    //    d (用于增减的日期)  合法参数:任何能被 new Date() 转化的日期 
    //    i (增减数量)       合法参数:正负整数 与 0                              
    // type (日期类型)       合法参数:
    //     年 : year、y、年
    //     月 : month、mon、月
    //     周 : week、w、周
    //     日 : day、d、天、日
    //     时 : hours、h、时、小时
    //     分 : minutes、m、分、分钟
    //     秒 : seconds、s、秒、秒钟
    //   毫秒 : milliseconds、ms、毫秒
    /////////////////////////////////////////////////////////////////////
    var t = new Date(d)
    var yObj  = {a:['year','y','年'],s:'setFullYear',g:'getFullYear'}
    var monObj= {a:['month','mon','月'],s:'setMonth',g:'getMonth'}
    var wObj  = {a:['week','w','周'],s:'setDate',g:'getDate'}
    var dObj  = {a:['day','d','天','日'],s:'setDate',g:'getDate'}
    var hObj  = {a:['hours','h','时'],s:'setHours',g:'getHours'}
    var mObj  = {a:['minutes','m','分','分钟'],s:'setMinutes',g:'getMinutes'}
    var sObj  = {a:['seconds','s','秒','秒钟'],s:'setSeconds',g:'getSeconds'}
    var msObj = {a:['milliseconds','ms','毫秒'],s:'setMilliseconds',g:'getMilliseconds'}
    var nt = null
    var o = [yObj,monObj,wObj,dObj,hObj,mObj,sObj,msObj]

    o.forEach(function (v) {
      if ( v.a.indexOf(type) > 0) {
        nt = new Date(t[v.s](t[v.g]() + i))
      }
    })

    return nt.toLocaleString()

  }

  // 使用与上面示例相同
  console.log('y ',getAfterLocalDate(new Date(),3,'年'))
  console.log('mon ',getAfterLocalDate(new Date(),3,'月'))
  console.log('w ',getAfterLocalDate(new Date(),3,'周'))
  console.log('d ',getAfterLocalDate(new Date(),-3,'日'))
  console.log('h ',getAfterLocalDate(new Date(),-1,'时'))
  console.log('s ',getAfterLocalDate(new Date(),-30,'分'))
  console.log('m ',getAfterLocalDate(new Date(),300,'秒'))
  console.log('ms ',getAfterLocalDate(new Date(),3000,'ms'))

 

自定义一个实例方法:

  // 给Date的实例定义一个方法
  Date.prototype.isExpired = function (d,i,type) {
    if (d === undefined || i === undefined || type === undefined ) {
      return '参数有误'
    }
    ////////////////////////////////////////////////////////////////////
    //    d (用于增减的日期)  合法参数:任何能被 new Date() 转化的日期 
    //    i (增减数量)       合法参数:正负整数 与 0                              
    // type (日期类型)       合法参数:
    //     年 : year、y、年
    //     月 : month、mon、月
    //     周 : week、w、周
    //     日 : day、d、天、日
    //     时 : hours、h、时、小时
    //     分 : minutes、m、分、分钟
    //     秒 : seconds、s、秒、秒钟
    //   毫秒 : milliseconds、ms、毫秒
    /////////////////////////////////////////////////////////////////////
    
    var t = new Date(d) 
    var yObj  = {a:['year','y','年'],s:'setFullYear',g:'getFullYear'}
    var monObj  = {a:['month','mon','月'],s:'setMonth',g:'getMonth'}
    var wObj  = {a:['week','w','周'],s:'setDate',g:'getDate'}
    var dObj  = {a:['day','d','天','日'],s:'setDate',g:'getDate'}
    var hObj  = {a:['hours','h','时'],s:'setHours',g:'getHours'}
    var mObj  = {a:['minutes','m','分','分钟'],s:'setMinutes',g:'getMinutes'}
    var sObj  = {a:['seconds','s','秒','秒钟'],s:'setSeconds',g:'getSeconds'}
    var msObj = {a:['milliseconds','ms','毫秒'],s:'setMilliseconds',g:'getFullYear'}
    var nt = null // 存储 t 增减后的时间点
    var o = [yObj,monObj,wObj,dObj,hObj,monObj,sObj,msObj]

    o.forEach(function (v) {
      if ( v.a.indexOf(type) > 0 ) {
        nt = new Date(t[v.s](t[v.g]() + i)) // 获取相应时间点进行增减
      }
    })

    // 缺陷:参数d 和 this 都是 new Date() 时,对比只有极小几率相等,因为方法由调用到运行之间有时间差,有可能耗费了几毫秒或以上
    return nt < this //  参数 d 时间点增减后 与 this 时间点对比
  }

  var now = new Date()
  var oDate = new Date('2020/1/1 11:11:11')

  console.log('2020/1/1 11:11:11 的三年后早于当前时间吗? ',now.isExpired(oDate,3,'年'))
  console.log('2020/1/1 11:11:11 的九个月后早于当前时间吗?',now.isExpired(oDate,9,'月'))
  console.log('现在的三周后早于 2020/1/1 11:11:11 吗? ',oDate.isExpired(now,3,'周'))
  console.log('2020/1/1 11:11:11 的三天前早于当前时间吗? ',now.isExpired(new Date(),-3,'日'))
  console.log('现在的一个小时前早于 2020/1/1 11:11:11 吗? ',oDate.isExpired(now,-1,'时'))
  console.log('2020/1/1 11:11:11 的三十分钟前早于 2020/1/1 11:11:11 吗? ',oDate.isExpired(oDate,-30,'分'))
  console.log('现在的三百秒后早于 2020/1/1 11:11:11 吗? ',oDate.isExpired(new Date(),300,'秒'))
  console.log('现在的三千毫秒前早于 2020/1/1 11:11:11 吗?',oDate.isExpired(new Date(),-3000,'ms'))

 

 

 

JavaScript 中的三大对象 (本地对象、内置对象、 宿主对象)

本地对象

 

内置对象

 

宿主对象

 

posted @ 2020-05-11 13:57  elfpower  阅读(1840)  评论(0编辑  收藏  举报