以下转载:
日子一天天过去,像时钟的表针一样摇曳着时光,很难想象没有时间的日子要怎样面对,又很讨厌生活在一分一秒的时间的格子里,人真是个矛盾的动物……
分
分秒秒,我们都跟时间有密切的接触。也因此,很多程序中,也少不了对时间的处理。
这本来已经很复杂,可是,这么多的浏览器厂商还是没能给我们一个
简单的环境。
还是那句话,生命不止,浏览器兼容性问题不歇。
今天,就说一下,跟时间有密切关系的
JS 内置对象 Date
Date
对象在JS里应该是比较常用的对象了,属于Native Object(相对于 Host Object,即,宿主对象,例如,document)。
关
于这个对象比较官方的说法在 ECMA-262 5th 的第 15.9 中,有兴趣的童鞋可以看看。
这个对象提供了好多比较实用的方法,但奈何
有些方法在各浏览器中的实现是不同的。千里之堤,溃于蚁穴,往往一个小小的失误,会造成致命的问题。为了程序的健壮性,我们应该去认识这些差异性,以做到
未雨绸缪,有效的规避这些错误。
那么,现在就说说常见的几个错误。
toLocaleString()的兼容性问题
根据 ECMA-262
5th中的说明,这个方法应该返回一个字符串的值,以合适的易读的方式,来显示当前时区的日期。具体没有规定显示成什么样子。
于是乎,差异就产
生了。
看例子:
JScript code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->document.write((
new
Date(
"
1999/09/09
"
)).toLocaleString());
各浏览器中的结果:
Firefox 和
IE : 1999年9月9日 0:00:00
Opera: 1999/9/9 0:00:00
Safari:
Thursday, September 09, 1999 00:00:00
Chrome : Thu Sep
09 1999 00:00:00 GMT+0800 (China Standard Time)
如果,你一直认
为,它的返回值是 “1999年9月9日
0:00:00”,并且按照它来处理,那么,你的程序逻辑,肯定会出问题。如果是比较基础的底层的方法,那么,可能会影响大功能。
关于日
期的显示,可以使用自己的方法,来消除这种差异。以下程序健壮性不好,是那么个意思。
JScript
code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
/*
*
* date : Date 对象实例
*/
function
localeDate(date) {
return
date.getFullYear()
+
"
年
"
+
(date.getMonth()
+
1
)
+
"
月
"
+
date.getDate()
+
"
日
"
+
"
"
+
date.getHours()
+
"
:
"
+
date.getMinutes()
+
"
:
"
+
date.getSeconds();
}
需要注意的地方,有两点:
1.
获得年份的时候,使用的是 getFullYear(),而没有使用 getYear();
2. 月份使用 getMonth(),需加 1
才是真是月份值。
为什么没有使用getYear(),而使用的是getFullYear()呢?
因为
getYear()同样存在兼容性问题。
getYear()
兼容性问题
MSDN 如此描述这个方法的:
对于1900-1999这段时间,调用
getYear() 方法将返回的年份值是一个两位数字的整数,它代表了所保存的年份与 1900 年之间的差距。而对于其它
的
年份,返回值是一个四位的整数。
参见MSDN:http://msdn.microsoft.com/en-us/library/x0a9sc10%28VS.85%29.aspx
注意上面所说的"其他",是指1900年以前,2000及以后.
其它浏览器此部分的官方文档中则说明:
getYear()
返回的值始终为 Date 对象中的年份与 1900 年之间的差值。
这个个方法已经过时,之所以提供这个方法,是为了保持向后的兼容性。请改
用 getFullYear 方法。
通过测试,对比一下这两个方法:
HTML
code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><
div
id
="show"
></
div
>
<
script
language
="JavaScript"
>
window.onload
=
function
() {
var
dateArray
=
[
"
0000
"
,
"
0001
"
,
"
0099
"
,
"
0100
"
,
"
0500
"
,
"
0999
"
,
"
1000
"
,
"
1001
"
,
"
1500
"
,
"
1899
"
,
"
1900
"
,
"
1901
"
,
"
1999
"
,
"
2000
"
,
"
2001
"
,
"
2009
"
];
var
i
=
0
;
for
(i
=
0
; i
<
dateArray.length; i
++
) {
var
msg
=
""
;
var
date
=
new
Date(
"
Jan 01,
"
+
dateArray[i]
+
"
01:00:00
"
);
msg
=
dateArray[i]
+
"
:
"
+
"
getYear():
"
+
date.getYear()
+
"
;
"
+
"
getFullYear():
"
+
date.getFullYear();
showMsg(msg);
}
}
function
showMsg(msg) {
document.getElementById(
'
show
'
).innerHTML
+=
msg
+
"
</br>
"
;
}
</
script
>
Firefox 和 Opera:
0000: getYear(): NaN;
getFullYear(): NaN
0001: getYear(): NaN; getFullYear(): NaN
0099:
getYear(): 99; getFullYear(): 1999
0100: getYear(): -1800;
getFullYear(): 100
0500: getYear(): -1400; getFullYear(): 500
0999:
getYear(): -901; getFullYear(): 999
1000: getYear(): -900;
getFullYear(): 1000
1001: getYear(): -899; getFullYear(): 1001
1500:
getYear(): -400; getFullYear(): 1500
1899: getYear(): -1;
getFullYear(): 1899
1900: getYear(): 0; getFullYear(): 1900
1901:
getYear(): 1; getFullYear(): 1901
1999: getYear(): 99; getFullYear():
1999
2000: getYear(): 100; getFullYear(): 2000
2001: getYear():
101; getFullYear(): 2001
2009: getYear(): 109; getFullYear(): 2009
IE:
0000:
getYear(): NaN; getFullYear(): NaN
0001: getYear(): NaN;
getFullYear(): NaN
0099: getYear(): 99; getFullYear(): 1999
0100:
getYear(): 100; getFullYear(): 100
0500: getYear(): 500;
getFullYear(): 500
0999: getYear(): 999; getFullYear(): 999
1000:
getYear(): 1000; getFullYear(): 1000
1001: getYear(): 1001;
getFullYear(): 1001
1500: getYear(): 1500; getFullYear(): 1500
1899:
getYear(): 1899; getFullYear(): 1899
1900: getYear(): 0;
getFullYear(): 1900
1901: getYear(): 1; getFullYear(): 1901
1999:
getYear(): 99; getFullYear(): 1999
2000: getYear(): 2000;
getFullYear(): 2000
2001: getYear(): 2001; getFullYear(): 2001
2009:
getYear(): 2009; getFullYear(): 2009
Chrome:
0000:
getYear(): 100; getFullYear(): 2000
0001: getYear(): 101;
getFullYear(): 2001
0099: getYear(): 99; getFullYear(): 1999
0100:
getYear(): -1800; getFullYear(): 100
0500: getYear(): -1400;
getFullYear(): 500
0999: getYear(): -901; getFullYear(): 999
1000:
getYear(): -900; getFullYear(): 1000
1001: getYear(): -899;
getFullYear(): 1001
1500: getYear(): -400; getFullYear(): 1500
1899:
getYear(): -1; getFullYear(): 1899
1900: getYear(): 0;
getFullYear(): 1900
1901: getYear(): 1; getFullYear(): 1901
1999:
getYear(): 99; getFullYear(): 1999
2000: getYear(): 100;
getFullYear(): 2000
2001: getYear(): 101; getFullYear(): 2001
2009:
getYear(): 109; getFullYear(): 2009
Safari:
0000:
getYear(): 100; getFullYear(): 2000
0001: getYear(): 101;
getFullYear(): 2001
0099: getYear(): 99; getFullYear(): 1999
0100:
getYear(): -1801; getFullYear(): 99
0500: getYear(): -1401;
getFullYear(): 499
0999: getYear(): -902; getFullYear(): 998
1000:
getYear(): -901; getFullYear(): 999
1001: getYear(): -899;
getFullYear(): 1001
1500: getYear(): -400; getFullYear(): 1500
1899:
getYear(): -1; getFullYear(): 1899
1900: getYear(): 0;
getFullYear(): 1900
1901: getYear(): 1; getFullYear(): 1901
1999:
getYear(): 99; getFullYear(): 1999
2000: getYear(): 100;
getFullYear(): 2000
2001: getYear(): 101; getFullYear(): 2001
2009:
getYear(): 109; getFullYear(): 2009
可见,在获取 1000
年后的日期的年份儿时,getFullYear() 方法还是比较保险的,但是,1000年以及以前的就不保险了。Safari对
100~1000年之间的年份儿,直接少了1年。其他浏览器倒还可以。小于100年的就比较扯了,都很扯。
分享到:
相关推荐
JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象...
原生JavaScript中的Date对象是一个非常重要的内置对象,它提供了多种处理日期和时间的方法。本文将详细解析Date对象的构造函数用法、日期时间的表示以及一些相关的静态方法。 首先,Date对象是基于1970年1月1日...
JavaScript中的Date对象是用于处理日期和时间的核心组件。在JavaScript中,Date对象提供了一系列的方法来创建、修改和读取日期和时间。这篇文章将深入探讨Date对象的各个方面,帮助你更好地理解和应用这个对象。 1....
JavaScript中的Date对象是用于处理日期和时间的核心构造函数,提供了丰富的功能来创建、操作和格式化日期。在JavaScript中,Date对象的方法分为两种主要类型:本地时间和UTC(通用协调时)时间。本地时间指的是根据...
js处理java后台传过来的date对象并转换成指定格式的字符串,亲测可用
Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。具体扩展的方法如下: parseCHS--静态方法。解析常用的中文日期并返回日期对象。 add--日期加减操作。[注:此函数在上传时还存在...
在JavaScript中,Date对象是处理日期和时间的核心工具。它提供了丰富的功能,允许开发者获取、设置和操作日期和时间。当我们想要实现实时钟表,也就是一个不断更新当前时间的时钟,我们可以利用JavaScript的定时器...
JavaScript中的Date对象是用于处理日期和时间的核心内置对象。它提供了丰富的功能,允许开发者创建、操作和格式化日期。在“关于js的Date对象的有用扩展”中,我们可以看到一些额外的功能或方法,可能是对原生Date...
Date对象之获取和设置月份-getMonth&setMonth(教辅)Date对象之获取和设置月份-getMonth&setMonth(教辅)Date对象之获取和设置月份-getMonth&setMonth(教辅)Date对象之获取和设置月份-getMonth&setMonth(教辅)...
JavaScript中的Date对象是用于处理日期和时间的核心构造函数,提供了丰富的功能来操作和展示日期。在JavaScript中,Date对象能够创建、格式化、比较以及计算日期。以下是对Date对象的详细解析: 1. 创建Date对象 -...
Date对象有个getDay方法,它根据本地时间,返回一个具体日期中一周的第几天。返回值从0~6,分别对应周日~周六 getDay 0 1 2 3 4 5 6 星期几 周日 周一 周二 周三 周四 周五 周六 用到日期相关的需求时...
### JavaScript 转换日期字符串为 Date 日期对象的方法 在 JavaScript 开发中,处理日期是非常常见的需求之一。很多时候,我们需要将用户输入或其他来源得到的日期字符串转换为 `Date` 对象,以便进行进一步的计算...
### JavaScript中Date对象的使用总结 #### 概述 JavaScript 的 `Date` 对象用于处理日期和时间。本文档详细介绍了 `Date` 对象的基本使用方法及其提供的多种实用功能,帮助开发者更好地理解和应用这一核心对象。 ...
### JavaScript Date对象转换为字符串 在JavaScript中,`Date`对象提供了多种方法来获取和设置日期及时间。本文将详细介绍如何将`...以上就是关于JavaScript中`Date`对象转换为字符串的相关知识点,希望对你有所帮助!
### JavaScript Date 对象详解 #### 一、概述 在JavaScript编程语言中,`Date`对象是一种非常实用且功能强大的工具,主要用于处理与日期和时间相关的数据。通过`Date`对象,开发者可以轻松地获取系统当前的日期和...
如果你知道从1970年1月1日00:00:00 UTC到当前时间的毫秒数,你可以直接传入这个数值来创建Date对象: ```javascript var now = new Date(); var d = new Date(now.getTime()); ``` 这将创建一个与当前时间...
JavaScript中的Date对象是用于处理日期和时间的核心构造函数,它提供了丰富的功能,允许开发者创建、操作和格式化日期。在本文中,我们将探讨如何利用Date对象实现一个简易的日历功能。 首先,HTML部分构建了日历的...
JavaScript中的Date对象是一个内置对象,用于处理日期和时间。它提供了各种方法来创建日期对象、获取和设置日期和时间的各个部分、执行日期时间计算以及格式化日期时间等操作。接下来,我们将详细探讨JavaScript ...
JavaScript Date(日期) 对象 日期对象用于处理日期和时间。 在线实例 使用 getFullYear() 获取年份。 getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。 如何使用 setFullYear() 设置具体的日期。 如何使用...