js Date类型 2018.7.3

Date类型

ECMAScript 中的 Date 类型是在早期 Java 中的 java.util.Date 类基础上构建的。为此,Date 类型使用自 UTC(Coordinated Universal Time,国际协调时间)1970 年 1 月 1 日午夜(零时)开始经过 的毫秒数来保存日期。在使用这种数据存储格式的条件下,Date 类型保存的日期能够精确到 1970 年 1 月 1 日之前或之后的 285 616 年。

要创建一个日期对象,使用 new 操作符和 Date 构造函数即可,如下所示。

var now = new Date();

在调用 Date 构造函数而不传递参数的情况下,新创建的对象自动获得当前日期和时间。如果想根 据特定的日期和时间创建日期对象,必须传入表示该日期的毫秒数(即从 UTC 时间 1970 年 1 月 1 日午 夜起至该日期止经过的毫秒数)。为了简化这一计算过程,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)。只有兼容

ECMAScript 5 的实现支持这种格式。

 

例如,要为 2004 年 5 月 25 日创建一个日期对象,可以使用下面的代码:

var someDate = new Date(Date.parse("May 25, 2004"));

如果传入 Date.parse()方法的字符串不能表示日期,那么它会返回 NaN。实际上,如果直接将表 示日期的字符串传递给 Date 构造函数,也会在后台调用 Date.parse()。换句话说,下面的代码与前 面的例子是等价的:

var someDate = new Date("May 25, 2004");

Date.UTC()方法同样也返回表示日期的毫秒数,但它与 Date.parse()在构建值时使用不同的信 息。Date.UTC()的参数分别是年份、基于 0 的月份(一月是 0,二月是 1,以此类推)、月中的哪一天 (1 到 31)、小时数(0 到 23)、分钟、秒以及毫秒数。在这些参数中,只有前两个参数(年和月)是必 需的。如果没有提供月中的天数,则假设天数为 1;如果省略其他参数,则统统假设为 0。以下是两个

使用 Date.UTC()方法的例子:

// GMT时间2000年1月1日午夜零时

var allFives = new Date(Date.UTC(2000, 0));

// GMT时间2005年5月5日下午5:55:55

var allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

这个例子创建了两个日期对象。第一个对象表示 GMT 时间 2000 年 1 月 1 日午夜零时,传入的值一 个是表示年份的 2000,一个是表示月份的 0(即一月份)。因为其他参数是自动填充的(即月中的天数 为 1,其他所有参数均为 0),所以结果就是该月第一天的午夜零时。第二个对象表示 GMT 时间 2005 年 5 月 5 日下午 5:55:55,即使日期和时间中只包含 5,也需要传入不一样的参数:月份必须是 4(因为 月份是基于 0 的)、小时必须设置为 17(因为小时以 0 到 23 表示),剩下的参数就很直观了。

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

因此,如果第一个参数是数值,Date 构造函数就会假设该值是日期中的年份,而第二个参数是月份,

// 本地时间2000年1月1日午夜零时

var y2k = new Date(2000, 0);

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

以上代码创建了与前面例子中相同的两个日期对象,只不过这次的日期都是基于系统设置的本地时 区创建的。

ECMAScript 5 添加了 Data.now()方法,返回表示调用这个方法时的日期和时间的毫秒数。这个方 法简化了使用 Data 对象分析代码的工作。例如:

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

 
 

与其他引用类型一样,Date 类型也重写了 toLocaleString()、toString()和 valueOf()方法; 但这些方法返回的值与其他类型中的方法不同。Date 类型的 toLocaleString()方法会按照与浏览器 设置的地区相适应的格式返回日期和时间。这大致意味着时间格式中会包含 AM 或 PM,但不会包含时 区信息(当然,具体的格式会因浏览器而异)。而 toString()方法则通常返回带有时区信息的日期和 时间,其中时间一般以军用时间(即小时的范围是 0 到 23)表示。下面给出了在不同浏览器中调用 toLocaleString()和 toString()方法,输出 PST(Pacific Standard Time,太平洋标准时间)时间 2007 年 2 月 1 日午夜零时的结果。

Internet Explorer 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()——以特定于实现的格式显示时、分、秒和时区; 10  toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
 toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
 toUTCString()——以特定于实现的格式完整的 UTC 日期。

 

猜你喜欢

转载自www.cnblogs.com/mawn/p/9258637.html