欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript类型系统——日期Date对象全面了解

程序员文章站 2023-11-13 13:10:58
前面的话 date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口。date对象是在早期java中的java.util.date类基础上创建的...

前面的话

date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口。date对象是在早期java中的java.util.date类基础上创建的,为此,date类型使用自utc1970年1月1日0点开始经过的毫秒数来保存日期,它可以表示的时间范围是1970年1月1日0点前后的各1亿天。本文将详细介绍date对象的用法

静态方法在介绍date对象的构造函数之前,先介绍静态方法。因为,date对象的静态方法与其构造函数有着千丝万缕的联系。使用构造函数创建date对象的过程,类似于披着外套的静态方法的使用过程

date对象总共有三个静态方法,分别是date.now()、date.parse()、date.utc()。这些方法通过date()构造函数本身调用,而不是通过date实例对象

date.now()

ecmascript5新增了now()方法,该方法返回当前时间距离1970年1月1日0点utc的毫秒数。该方法不支持传递参数

[注意]该方法返回的是number数字类型

console.log(date.now());//1468297046050
console.log(date.now('2016,1,1'));//1468297046050
console.log(typeof date.now());//'number'

在不支持date.now()方法的浏览器中,可以用+操作符把date对象转换成数字,也可以实现类似效果

console.log(new date());//tue jul 12 2016 12:21:33 gmt+0800 (中国标准时间)
console.log(+new date());//1468297293433
console.log(+new date(2000,1,1));//949334400000

该方法常用于分析代码的工作

var start = date.now();
dosomething();
var stop = date.now();
result = stop - start;

date.parse()

该方法用于解析一个日期字符串,参数是一个包含待解析的日期和时间的字符串,返回从1970年1月1日0点到给定日期的毫秒数

该方法会根据来解析字符串的格式,除了标准格式外,以下格式也支持。如果字符串无法识别,将返回nan

1、'月/日/年' 如6/13/2004

2、'月 日,年' 如january 12,2004或jan 12,2004

3、'星期 月 日 年 时:分:秒 时区' tue may 25 2004 00:00:00 gmt-0700

[注意]浏览器不支持不表示日期只表示时间的字符串格式

console.log(date.parse('6/13/2004'));//1087056000000
console.log(date.parse('january 12,2004'));//1073836800000
console.log(date.parse('tue may 25 2004 00:00:00 gmt-0700'));//1085468400000
console.log(date.parse('2004-05-25t00:00:00'));//1085443200000
console.log(date.parse('2016'));//1451606400000
console.log(date.parse('t00:00:00'));//nan
console.log(date.parse());//nan

 [注意]在ecmascript5中,如果使用标准的日期时间字符串格式规则的字符串中,数学前有前置0,则会解析为utc时间,时间没有前置0,则会解析为本地时间。其他情况一般都会解析为本地时间

console.log(date.parse('7/12/2016'));//1468252800000
console.log(date.parse('2016-7-12'));//1468252800000
console.log(date.parse('2016-07-12'));//1468281600000

date.utc()

date.utc()同样返回给定日期的毫秒数,但其参数并不是一个字符串,而是分别代表年、月、日、时、分、秒、毫秒的数字参数

date.utc(year,month,day,hours,minutes,seconds,ms),year和month参数是固定的,其余参数可选,

因为该函数有7个形参,所以其length值为7

console.log(date.utc.length);//7

[注意]该方法使用的是utc时间,而不是本地时间

console.log(date.utc(1970));//nan
console.log(date.utc(1970,0));//0
console.log(date.utc(1970,0,2));//86400000
console.log(date.utc(1970,0,1,1));//3600000
console.log(date.utc(1970,0,1,1,59));//714000
console.log(date.utc(1970,0,1,1,59,30));//717000

构造函数date()构造函数有多达5种的使用方法

【0】date()

数可以不带new操作符,像一个函数一样调用。它将忽略所有传入的参数,并返回当前日期和时间的一个字符串表示

date();

[注意]由于date()函数没有使用操作符,实际上它不能被称为构造函数

console.log(date());//"tue jul 12 2016 13:38:41 gmt+0800 (中国标准时间)"
console.log(date('2016/1/1'));//"tue jul 12 2016 13:38:41 gmt+0800 (中国标准时间)"
console.log(typeof date());//'string'

【1】date()函数使用new操作符,且不带参数时,将根据当前时间和日期创建一个date对象

new date();
console.log(new date());//tue jul 12 2016 13:41:45 gmt+0800 (中国标准时间)
console.log(new date);//tue jul 12 2016 13:41:45 gmt+0800 (中国标准时间)
console.log(typeof new date());//'object'

【2】date()函数可接受一个数字参数,该参数表示设定时间与1970年1月1日0点之间的毫秒数

new date(milliseconds);
console.log(new date(0));//thu jan 01 1970 08:00:00 gmt+0800 (中国标准时间)
console.log(new date(86400000));//fri jan 02 1970 08:00:00 gmt+0800 (中国标准时间)
console.log(typeof new date(0));//object

【3】date()函数可接受一个字符串参数,参数形式类似于date.parse()方法。但parse()方法返回的是一个数字,而date()函数返回的是一个对象 

new date(datestring);

console.log(new date('6/13/2004'));//sun jun 13 2004 00:00:00 gmt+0800 (中国标准时间)
console.log(date.parse('6/13/2004'));//1087056000000
console.log(typeof new date(6/13/2004));//object
console.log(typeof date.parse(6/13/2004));//number

关于标准的日期时间字符串中前置0的处理,也类似于date.parse()方法,若有前置0,则相当于utc时间,若没有,则相当于本地时间。其余情况一般都为本地时间

console.log(new date('7/12/2016'));//tue jul 12 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-7-12'));//tue jul 12 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-07-12'));//tue jul 12 2016 08:00:00 gmt+0800 (中国标准时间)

【4】date()函数可接受参数形式类似于date.utc()方法的参数,但date.utc()方法返回是一个毫秒数,且是utc时间,而date()函数返回是一个对象,且是本地时间

console.log(new date(2016,7,12));//fri aug 12 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(+new date(2016,7,12));//1470931200000
console.log(typeof new date(2016,7,12));//'object'
console.log(date.utc(2016,7,12));//1470960000000
console.log(typeof date.utc(2016,7,12));//'number'

[注意]使用参数类似于date.parse()函数的方法时,如果日期对象超出范围,浏览器会自动将日期计算成范围内的值;使用参数类似于date.utc()函数的方法时,如果日期对象超出范围,浏览器会提示invalid date

console.log(new date(2016,7,32));//thu sep 01 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date(2016,8,1));//thu sep 01 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-8-32'));//invalid date
console.log(new date('2016-9-1'));//thu sep 01 2016 00:00:00 gmt+0800 (中国标准时间)

实例方法

date对象没有可以直接读写的属性,所有对日期和时间的访问都需要通过方法。date对象的大多数方法分为两种形式:一种是使用本地时间,一种是使用utc时间,这些方法在下面一起列出。例如,get[utc]day()同时代表getday()和getutcday()

date对象一共有46个实例方法,可以分为以下3类:to类、get类、set类

【to类】

to类方法从date对象返回一个字符串,表示指定的时间

tostring()

返回本地时区的日期字符串

toutcstring()

返回utc时间的日期字符串

toisostring()

返回date对象的标准的日期时间字符串格式的字符串

totimestring()

返回date对象的时间部分的字符串

tojson()

返回一个符合json格式的日期字符串,与toisostring方法的返回结果完全相同

console.log(new date('2016-7-12').tostring());//tue jul 12 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-7-12').toutcstring());//mon, 11 jul 2016 16:00:00 gmt
console.log(new date('2016-7-12').toisostring());//2016-07-11t16:00:00.000z
console.log(new date('2016-7-12').todatestring());//tue jul 12 2016
console.log(new date('2016-7-12').totimestring());//00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-7-12').tojson());//2016-07-11t16:00:00.000z

tolocalestring()

tostring()方法的本地化转换

tolocaletimestring()

totimestring()方法的本地化转换

tolocaledatestring()

todatestring()方法的本地化转换

console.log(new date('2016-7-12').tostring());//tue jul 12 2016 00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-7-12').tolocalestring());//2016/7/12 上午12:00:00
console.log(new date('2016-7-12').todatestring());//tue jul 12 2016
console.log(new date('2016-7-12').tolocaledatestring());//2016/7/12
console.log(new date('2016-7-12').totimestring());//00:00:00 gmt+0800 (中国标准时间)
console.log(new date('2016-7-12').tolocaletimestring());//上午12:00:00

【get类】

date对象提供了一系列get类方法,用来获取实例对象某个方面的值

在介绍get类方法之前,首先要介绍valueof()方法

valueof()

返回距离1970年1月1日0点的毫秒数

因此,可以方便地使用比较运算符来比较日期值

var date1 = new date(2007,0,1);
var date2 = new date(2007,1,1);
console.log(date1 > date2);//false
console.log(date1 < date2);//true

gettime()

返回距离1970年1月1日0点的毫秒数,同valueof()

在ecmascript5之前,可以使用gettime()方法实现date.now()

date.now = function(){
    return (new date()).gettime()
  }

gettimezoneoffset()

返回当前时间与utc的时区差异,以分钟表示(8*60=480分钟),返回结果考虑到了夏令时因素

console.log(new date('2016-7-12').valueof());//1468252800000
console.log(new date('2016-7-12').gettime());//1468252800000
console.log(new date('2016-7-12').gettimezoneoffset());//-480

getyear()

  返回距离1900年的年数(已过时)

get[utc]fullyear()

  返回年份(4位数)

get[utc]month()

  返回月份(0-11)

get[utc]date()

  返回第几天(1-31)

get[utc]day()

  返回星期几(0-6)

get[utc]hours()

  返回小时值(0-23)

get[utc]minutes()

  返回分钟值(0-59)

get[utc]seconds()

  返回秒值(0-59)

get[utc]milliseconds()

  返回毫秒值(0-999)

  [注意]通过标准日期时间格式字符串,且有前置0的形式的参数设置,设置的是utc时间

console.log(new date('2016-07-12t10:00').getyear());//116
console.log(new date('2016-07-12t10:00').getfullyear());//2016
console.log(new date('2016-07-12t10:00').getutcfullyear());//2016
console.log(new date('2016-07-12t10:00').getmonth());//6
console.log(new date('2016-07-12t10:00').getutcmonth());//6
console.log(new date('2016-07-12t10:00').getdate());//12
console.log(new date('2016-07-12t10:00').getutcdate());//12
console.log(new date('2016-07-12t10:00').getday());//2
console.log(new date('2016-07-12t10:00').getutcday());//2
console.log(new date('2016-07-12t10:00').gethours());//18
console.log(new date('2016-07-12t10:00').getutchours());//10
console.log(new date('2016-07-12t10:00').getminutes());//0
console.log(new date('2016-07-12t10:00').getutcminutes());//0
console.log(new date('2016-07-12t10:00').getseconds());//0
console.log(new date('2016-07-12t10:00').getutcseconds());//0
console.log(new date('2016-07-12t10:00').getmilliseconds());//0
console.log(new date('2016-07-12t10:00').getutcmilliseconds());//0
//当前时间为16:35
console.log(new date().gethours());//16
console.log(new date().getutchours());//8

【set类】

date对象提供了一系列set类方法,用来设置实例对象的各个方面

set方法基本与get方法相对应,set方法传入类似于date.utc()的参数,返回调整后的日期的内部毫秒数

[注意]星期只能获取,不能设置

settime()

使用毫秒的格式,设置一个date对象的值

var d = new date('2016-07-12t10:00');
console.log(d.settime(86400000),d);//86400000 fri jan 02 1970 08:00:00 gmt+0800 (中国标准时间)

setyear()

  设置年份(已过时)

var d = new date('2016-07-12t10:00');
console.log(d.setyear(2000),d,d.getyear());//963396000000 wed jul 12 2000 18:00:00 gmt+0800 (中国标准时间) 100

set[utc]fullyear()

  设置年份(4位数),以及可选的月份值和日期值

set[utc]month()

  设置月份(0-11),以及可选的日期值

set[utc]date()

  设置第几天(1-31)

var d = new date('2016-07-12t10:00');
console.log(d.setfullyear(2015,1,1),d.getfullyear());//1422784800000 2015
console.log(d.setmonth(2),d.getmonth());//1425204000000 2
console.log(d.setdate(20),d.getdate());//1426845600000 20
console.log(d.tolocalestring());//2015/3/20 下午6:00:00

set[utc]hours()

  设置小时值(0-23),以及可选的分钟值、秒值及毫秒值

set[utc]minutes()

  设置分钟值(0-59),以及可选的秒值及毫秒值

set[utc]seconds()

  设置秒值(0-59),以及可选的毫秒值

set[utc]milliseconds()

  设置毫秒值(0-999)

var d = new date('2016-07-12t10:20:30');
console.log(d.sethours(1,2,3),d.gethours());//1468256523000 1
console.log(d.setminutes(2,3),d.getminutes());//1468256523000 2
console.log(d.setseconds(3),d.getseconds());//1468256523000 3
console.log(d.tolocaletimestring())//上午1:02:03
var d = new date('2016-07-12t10:20:30');
console.log(d.setutchours(1,2,3),d.gethours());//1468285323000 9
console.log(d.setutcminutes(2,3),d.getminutes());//1468285323000 2
console.log(d.setutcseconds(3),d.getseconds());//1468285323000 3
console.log(d.tolocaletimestring())//上午9:02:03

以上这篇javascript类型系统——日期date对象全面了解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。