JS基础知识回顾:引用类型(二)

ECMAScript中的Date类型是在早期Java中的java.util.Date类基础上构建的。

因此,Date类型使用自UTC(Coordinated Universal Time,国际协调时间)1970年1月1日午夜零点开始经过的毫秒数来保存日期。

在使用这种数据存储格式的条件下,Date类型保存的日期能够精确到1970年1月1日或之后的285616年。

要创建一个日期对象,使用new操作符和Date构造函数即可:var now=new Date();

在调用Date构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。

如果想根据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数。

为了简化这一计算过程,ECMAScript提供了两个方法:Date.parse()和Date.UTC()。

Date.parse()方法接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日期的毫秒数。

ECMA-262没有定义Date.parse()应该支持哪种日期格式,因此这个方法的行为因实现而异,而且通常是因地区而异。

将地区设置为美国的浏览器通常都接受下列日期格式:

“月/日/年”,如6/13/2004

“英文月明 日,年”,如January 12,2004

“英文星期几 英文月名 日 年 时:分:秒 时区”,如:Tue May 25 2004 00:00:00 GMT-0700

ISO 8601 扩展格式 YYYY-MM-DDTHH:mm:ss.sssZ,如:2004-05-25T00:00:00(只有兼容ECMAScript5的实现支持这种格式)

如果传入Date.parse()方法的字符串不能表示日期,那么它会返回NaN。

实际上,如果直接将表示日期的字符串传递给Date构造函数,也会在后台调用Date.parse(),例如:var someDate=new Date("May 25,2004");

日期对象及其在不同浏览器中的实现有许多奇怪的行为,其中一种倾向就是讲超出范围的值替换成当前的值,以便生成输出。

例如,在解析"January 32,2007"时,有的浏览器会将其解释为"February 1,2007";而Opera则更倾向于插入当前月份的当前日期,返回"January 当前日期,2007"。

Date.UTC()方法同样也返回表示日期的毫秒数,但它与Date.parse()在构建值时使用不同的信息。

Date.UTC()的参数分别是年份、基于0的月份(一月是0,二月是1,以此类推)、月中的哪一天(1到31)、小时数(0到23)、分钟、秒以及毫秒数。

在这些参数中,只有前两个参数是必须的,如果没有提供月中的天数,则假设天数为1,如果省略其他参数,则统统假设为0。

var y2k=new Date(Date.UTC(2000,0));//GMT时间2000年1月1日午夜零时

var allFives=new Date(Date.UTC(2005,4,5,17,55,55));//GMT时间2005年5月5日下午5:55:55

如同模仿Date.parse()一样,Date构造函数也会模仿Date.UTC(),但有一点明显不同:日期和时间都是基于本地时区而非GMT来创建。

不过Date构造函数接收的参数仍然与Date.UTC()相同。

var y2k=new Date(2000,0);//本地时间2000年1月1日午夜零时

var allFives=new Date(2005,4,5,17,55,55);//本地时间2005年5月5日下午5:55:55

ECMAScript5中增加了Date.now()方法,返回表示调用这个方法时的日期和时间的毫秒数,这个方法简化了使用Date对象分析代码的工作。

var start=Date.now();//取得开始时间

doSomething();//调用函数

var stop=Date.now(),result=stop-start;//取得停止时间

不过支持这个方法的浏览器只有IE9+、Firefox3+、Safari3+、Opera10.5、Chrome。

在不支持它的浏览器中,使用+操作符把Date对象转换成字符串,也可以达到同样的目的。

var start=+new Date();//获得开始时间

doSomething();//调用函数

var stop=+new Date(),result=stop-start;//取得停止时间

和其他引用类型一样,Date类型也重写了toLocaleString()、toString()和valueOf()方法,但这些方法返回的值与其他类型中的方法不同。

Date类型的toLocaleString()方法会按照与浏览器设置的地区相适应的格式返回日期和时间,这大致意味着时间格式中会包含AM或者PM,但不会包含时区信息。

Date类型的toString()方法则通常返回带有时区信息和日期的时间,其中时间一般以军用时间(即小时的范围是0到23)表示。

以下列出在不同浏览器中调用toLocaleString()和toString()方法,输出PST(Pacific Standard Time,太平洋标准时间)2007年2月1日午夜零时的结果:

-IE 8-

toLocaleString()-Thursday,February 01,2007 12:00:00 AM

toString()-Thu Feb 1 00:00:00 PST 2007

-Firefox 3.5-

toLocaleString()-Thursday,February 01,2007 12:00:00 AM

toString()-Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)

-Safari 4-

toLocaleString()-Thursday,February 01,2007 00:00:00

toString()-Thu Feb 01 2007 00:00:00 GMT-0800 (Pacific Standard Time)

-Chrome 4-

toLocaleString()-Thu Feb 01 2007 00:00:00 GMT-0800(Pacific Standard Time)

toString()-Thu Feb 01 2007 00:00:00 GMT-0800(Pacific Standard Time)

-Opera 10-

toLocaleString()-2/1/2007 12:00:00 AM

toString()-Thu,01 Feb 2007 00:00:00 GMT-0800

这两种方法在不同浏览器中返回的日期和时间格式可谓大相径庭,但是这一差别仅仅在调试代码是比较有用,在显示日期和时间时并没有什么价值。

Date类型的valueOf()方法并不会返回字符串,而是返回日期的毫秒表示,因此可以方便使用比较操作符来比较日期大小:

var date1=new Date(2007,0,1);//"January 1,2007"

var date2=new Date(2007,1,1);//"February 1,2007"

alert(date1<date2);//true

alert(date1>date2);//false

Date类型还有一些专门用于将日期格式化为字符串的方式。

toDateString()-以特定于实现的格式显示星期几、月、日和年;

toTimeString()-以特定于实现的格式显示时、分、秒和时区;

toLocaleDateString()-以特定于实现的格式显示星期几、月、日和年;

toLocaleTimeString()-以特定于实现的格式显示时、分、秒;

toUTCString()-以特定于实现的格式完整的显示UTC日期。

与toLocaleString()方法和toString()方法一样,以上这些字符串格式方法的输出也是因浏览器而异的,因此没有哪一个方法能够用来在用户界面中显示一致的日期信息。

除了前面介绍的方法之外,还有一个名叫toGMTString()的方法,这是一个与toUTCString()等价的方法,其存在的目的在于确保向后兼容,不过ECMAScript推荐现在编写的代码一律使用toUTCString()方法。

UTC日期指的是在没有时区偏差的情况下(将日期转换为GMT时间)的日期值。

Date类型当中还定义了一些直接取得和设置日期值中特定部分的方法。

getTime()-返回表示日期的毫秒数,与valueOf()方法返回的值相同

setTime(毫秒)-以毫秒数设置日期,会改变整个日期

getFullYear()-取得四位数的年份

getUTCFullYear()-返回UTC日期的四位数年份

setFullYear(年)-设置日期的年份,传入的年份值必须是四位数字

setUTCFullYear(年)-设置UTC日期的年份,传入的年份值必须是四位数字

getMonth()-返回日期中的月份,其中0表示一月,11表示十二月

getUTCMonth()-返回UTC日期中的月份,其中0表示一月,11表示十二月

setMonth(月)-设置日期的月份,传入的月份值必须大于0,超过11则增加年份

setUTCMonth(月)-设置UTC日期的月份,传入的月份值必须大于0,超过11则增加年份

getDate()-返回日期月份中的天数(1到31)

getUTCDate()-返回UTC日期月份中的天数(1到31)

setDate(日)-设置日期月份中的天数,如果传入的值超过了该月份中应有的天数,则增加月份

setUTCDate(日)-设置UTC日期月份中的天数,如果传入的值超过了该月份中应有的天数,则增加月份

getDay()-返回日期中星期的星期几,其中0表示星期一,6表示星期日

getUTCDay()-返回UTC日期中星期的星期几,其中0表示星期一,6表示星期日

getHours()-返回日期中的小时数(0到23)

getUTCHours()-返回UTC日期中的小时数(0到23)

setHours(时)-设置日期中的小时数,传入的值超过了23则增加月份中的天数

setUTCHours(时)-设置UTC日期中的小时数,传入的值超过了23则增加月份中的天数

getMinutes()-返回日期中的分钟数(0到59)

getUTCMinutes()-返回UTC日期中的分钟数(0到59)

setMinutes(分)-设置日期中的分钟数,传入的值超过59则增加小时数

setUTCMinutes(分)-设置日期中的分钟数,传入的值超过59则增加小时数

getSeconds()-返回日期中的秒数(0到59)

getUTCSeconds()-返回UTC日期中的秒数(0到59)

setSeconds(秒)-设置日期中的秒数,传入的值超过59则增加分钟数

setUTCSeconds(秒)-设置UTC日期中的秒数,传入的值超过59则增加分钟数

getMilliseconds()-返回日期中的毫秒数

getUTCMilliseconds()-返回UTC日期中的毫秒数

setMilliseconds(毫秒)-设置日期中的毫秒数

setUTCMilliseconds(毫秒)-设置UTC日期中的毫秒数

getTimezoneOffset()-返本地时间与UTC时间相差的分钟数

JS基础知识回顾:引用类型(二)

时间: 2024-10-09 09:52:34

JS基础知识回顾:引用类型(二)的相关文章

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

JS基础知识回顾:引用类型(四)

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法. 由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定. 函数的声明有以下三种形式: function sum(num1,num2){return num1+num2;}//利用函数声明语法定义 var sum=function(num1,num2){return num1+num2;}//利用函数表达式定义 var sum=new Function("num1","nu

JS基础知识回顾:引用类型(三)

ECMAScript通过RegExp类型来支持正则表达式. 使用类似Perl的语法就可以创建一个正则表达式:var expression=/pattern/flags; 其中模式(pattern)部分可以是任何简单或复杂的正则表达式,可以包含字符类.限定符.分组.向前查找以及反向引用. 每个正则表达式都可以带有一个或多个标志(flags),用以标注正则表达式的行为. 正则表达式的匹配模式只是下列三个标志: g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即

JS基础知识回顾:ECMAScript的语法(二)

ECMAScript中有五种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String ECMAScript还有一种复杂数据类型——Object,Object本质上是由一组无序的名值对组成的. ECMAScript不支持任何创建自定义类型的机制,而所有值最终都将是上述六种数据类型之一,由于ECMAScript的数据类型具有动态性,因此的确没有再定义其他数据类型的必要了. 监狱ECMAScript是松散类型的,因此需要有一种手段来检测给定变量的数据

JS基础知识回顾:引用类型(六)

ECMA-262对内置对象的定义是:由ECMAScript实现提供的.不依赖于宿主环境的对象,这些对象在ECMAScript程序执行之前就已经存在了. 开发人员不必显式的实例化内置对象,因为他们已经实例化了. 前面我们已经介绍了大多数内置对象,如Object.Array.String,ECMA-262还定义了两个单体内置对象:Global和Math. Global对象可以说是ECMAScript中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的. 实际上并没有全局变量或全局属性

JS基础知识回顾:变量、作用域和内存问题

ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指的是那些可能由多个值构成的对象. 引用类型的值是保存在内存中的对象,与其他语言不同,JavaScript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间. 在操作对象时,实际上是在操作对象的引用而不是实际的对象. 在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型的,ECMAScript放弃了这一传统. 定义基本类型值和引用类型值的方式是类似的:创建

JS基础知识回顾:ECMAScript的语法(三)

ECMA-262描述了一组用于操作数据值的操作符,包括算术操作符.位操作符.关系操作符和相等操作符. ECMAScript操作符的与众不同之处在于,他们能够适用于很多值,例如字符串.数字值.布尔值.甚至是对象. 在将这些操作符应用于对象时,相应的操作符通常都会调用对象的valueOf()和(或)toString()方法,以便取得可以操作的值. 只能操作一个值的操作符叫做一元操作符. 递增和递减操作符直接借鉴自C,各有前置型和后置型两个版本:a++.++a.a--.--a 这四种操作符不仅适用于整

JS基础知识回顾:在HTML中使用JavaScript

想HTML页面中插入JavaScript的主要方法就是使用<script>元素. HTML4.01当中为<script>元素定义了下列6个属性: language(已废弃):原来用于表示编写代码使用的脚本语言,如JavaScript.JavaScript1.2.VBScript等,由于大多数浏览器会忽略此属性,因此就没有必要再用了: type(可选):可以看成是language的替代属性,表示编写代码使用的脚本语言的内容类型,也被称作MIME类型,在未指定此属性的情况下会被默认为t

JS基础知识回顾:ECMAScript的语法(一)

任何语言的核心都必然会描述这门语言最基本的工作原理,而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. ECMAScript中的一切变量.函数名.操作符都区分大小写. ECMAScript的标识符要符合下列规则:第一个字符必须是字母.下划线或美元符号:其他字符可以是字母.下划线.美元符号或数字. 标识符中的字母也可以包含扩展的ASCII或Unicode字母字符,但是并不推荐. 按照惯例,ECMAScript标识符采用驼峰大小写的格式来书写,尽管没