《JavaScript高级程序设计》第三版 笔记
参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
5.3 Date 类型
ECMAScript 中的 Date 类型是在早期 Java 中的 java.util.Date 类基础上构建的;
为此, Date 类型使用自 UTC (Coordinated Universal Time ,国际协调时间)1970 年 1 月 1 日午夜(零时)开始经过的毫秒数来保存日期 ;
在使用这种数据存储格式的条件下, Date 类型保存的日期能够精确到 1970 年 1 月 1 日之前或之后的 285616 年。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
创建日期对象:
new 操作符 + Date 构造函数。
在不传参的情况下,新创建的对象自动获得当前日期和时间。
//Date对象没有字面量格式
//当Date作为构造函数调用并传入多个参数时,所定义参数代表的是当地时间
new Date();
new Date(value);
new Date(dateString); //该参数应符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
/**
*value - 代表自1970年1月1日 00:00:00 (世界标准时间)起经过的毫秒数。
*dateString - 表示日期的字符串值。该字符串应该能被 Date.parse() 方法识别。
*year - 代表年份的整数值。为了避免2000年问题最好指定4位数的年份;使用 1998 ,而不要使用 98 。
*month - 代表月份的整数值,从 0(1月) 到 11(12月)。
*day - 代表一个月中的第几天的整数值,从 1 开始。
*hour - 代表一天中的小时数的整数值(24小时制)。
*minute - 分钟数。
*second - 秒数。
*millisecond - 表示时间的毫秒部分的整数值。
*/
example:
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="utf-8">
<title>Title</title>
<style>
body {
line-height: 180%;
}
</style>
</head>
<body>
<script>
//Date()构造函数
//Date对象没有字面量格式
//当Date作为构造函数调用并传入多个参数时,所定义参数代表的是当地时间
var timeD = new Date(); //实例化一个日期对象
var timeD2 = Date(); //返回一个字符串
var timeD3 = new Date(2013,13,1);
var timeD4 = new Date(2014,1,1);
alert("new Date():" + timeD + "---" + "Date():" + timeD2);
console.log("new Date():" + timeD + "---" + "Date():" + timeD2);
document.write("new Date():------" + timeD + "<br>");
document.write("Date():------" + timeD2 + "<br>");
document.write("typeof (new Date()):------" + (typeof timeD) + "<br>");
document.write("typeof (Date()):------" + (typeof timeD2) + "<br><br>");
document.write("new Date(2013,13,1):------" + timeD3 + "<br>");
document.write("new Date(2014,1,1):------" + timeD4 + "<br>");
document.write("new Date(2013,13,1) == new Date(2014,1,1):------" + (timeD3 == timeD4) + "<br>");
document.write("new Date(2013,13,1).toString() == new Date(2014,1,1).toString():------" + (timeD3.toString() == timeD4.toString()) + "<br><br>");
document.write("new Date(2018,1,1,13,75):------" + new Date(2018,1,1,13,75) + "<br><br>");
document.write("new Date(1453094034000):------" + new Date(1453094034000) + "<br><br>");
document.write("new Date('December 17, 1995 03:24:00'):------" + new Date('December 17, 1995 03:24:00') + "<br>");
document.write("new Date('1995-12-17T03:24:00'):------" + new Date('1995-12-17T03:24:00') + "<br>");
document.write("new Date(1995, 11, 17):------" + new Date(1995, 11, 17) + "<br>");
document.write("new Date(1995, 11, 17, 3, 24, 0):------" + new Date(1995, 11, 17, 3, 24, 0) + "<br>");
</script>
</body>
</html>
关于 new Date() 的补充说明:
example:
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="utf-8">
<title>Title</title>
<style>
body {
line-height: 180%;
}
</style>
</head>
<body>
<script>
//关于 new Date() 的补充说明
//如果不传参,则 Date 的构造器会依据系统设置的当前时间来创建一个 Date 对象。
//JavaScript 的 Date 对象为跨平台提供了统一的行为。时间属性可以在不同的系统中表示相同的时刻,而如果使用了本地时间对象,则反映当地的时间。
//JavaScript 的 Date 对象提供了数个 UTC 时间的方法,也相应提供了当地时间的方法。 UTC ,也就是我们所说的格林威治时间,指的是 time 中的世界时间标准。而当地时间则是指执行 JavaScript 的客户端所设置的时间。
document.write("new Date():----" + new Date() + "<br>");
//如果提供了至少两个参数,其余的参数均会默认设置为 1 (如果没有提供 day 参数)或 0 。
document.write("new Date(2018,7):----" + new Date(2018,7) + "<br>");
//JavaScript 的时间是由世界标准时间(UTC) 1970年1月1日开始,用毫秒计时。
//一天由 86,40 0,000 毫秒组成。
//Date 对象的范围是 -100,000,000 天至 100,000,000 天(等效的毫秒值)。
document.write("new Date(86400000)" + new Date(86400000) + "<br>");
document.write("new Date((86400000*-100000000)):----" + new Date((86400000*-100000000)) + "<br>");
document.write("new Date((86400000*100000000)):----" + new Date((86400000*100000000)) + "<br>");
document.write("new Date((86400000*-100000001)):----" + new Date((86400000*-100000001)) + "<br>");
document.write("new Date((86400000*100000001)):----" + new Date((86400000*100000001)) + "<br>");
//以一个函数的形式来调用 JavaScript 的 Date 对象(不使用 new 操作符)会返回一个代表当前日期和时间的字符串。
</script>
</body>
</html>
Date 对象的属性:
Date.prototype :
允许为 Date 实例对象添加属性。
Date.length :
Date.length 的值是 7 。这是该构造函数可接受的参数个数。
Date 对象的方法:
Date.now() :
返回自 1970-1-1 00:00:00 UTC(世界标准时间)至今所经过的毫秒数。
Date.parse() :
解析一个表示日期的字符串,并返回从 1970-1-1 00:00:00 所经过的毫秒数。
Date.UTC() :
接受和构造函数最长形式的参数相同的参数 (从 2 到 7 ) ,并返回从 1970-1-1 00:00:00 UTC 开始所经过的毫秒数。
example:
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="utf-8">
<title>Title</title>
<style>
body {
line-height: 180%;
}
</style>
</head>
<body>
<script>
//Date.length
//Date.now()
document.write("Date.length:----" + Date.length + "<br>");
document.write("Date.now():----" + Date.now() + "<br>");
document.write("new Date(Date.now()):----" + new Date(Date.now()) + "<br>");
</script>
</body>
</html>
根据特定日期和时间创建日期对象:
方法一:
传入表示该日期的毫秒数(即从 UTC 时间 1970 年 1 月 1 日午夜起至该日期止经过的毫秒数,可以通过 Date.parse() 和 Date.UTC() 方法来获取)。
方法二:
直接将表示日期的字符串传递给 Date 构造函数,也会在后台调用 Date.parse() 。
Date.parse()方法:
参数:
一个表示日期的字符串。
Date.parse(datestring);
结果:
返回从 1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的 UTC 时间)的毫秒数;
如传入的字符串不能表示日期,则返回 NaN 。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
example:
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="utf-8">
<title>Title</title>
<style>
body {
line-height: 180%;
}
</style>
</head>
<body>
<script>
//Date.parse()
document.write("8 个小时对应的毫秒数:----" + (8*60*60*1000) + "<br>");
document.write("Date.parse('1970-01-01 00:00:00'):----" + Date.parse('1970-01-01 00:00:00') + "<br>");
document.write("Date.UTC(1970,0,1,0,0,0):----" + Date.UTC(1970,0,1,0,0,0) + "<br>");
//如果参数只包含日期格式则将使用 UTC 时区来解析该参数。
// ISO 8601 格式中规定的时间加日期格式,则将作为本地时区处理。
document.write("Date.parse('Jan 1, 1970'):----" + Date.parse('Jan 1, 1970') + "<br>");
document.write("Date.parse('1970-01-01'):----" + Date.parse('1970-01-01') + "<br>");
//指定时区
document.write("Date.parse('Thu, 01 Jan 1970 00:00:00'):----" + Date.parse('Thu, 01 Jan 1970 00:00:00') + "<br>");
document.write("Date.parse('Thu, 01 Jan 1970 00:00:00 GMT'):----" + Date.parse('Thu, 01 Jan 1970 00:00:00 GMT') + "<br>");
document.write("Date.parse('Thu, 01 Jan 1970 00:00:00 +0400'):----" + Date.parse('Thu, 01 Jan 1970 00:00:00 +0400') + "<br>");
document.write("Date.parse('Thu, 01 Jan 1970 00:00:00 GMT+0400'):----" + Date.parse('Thu, 01 Jan 1970 00:00:00 GMT+0400') + "<br>");
document.write("Date.parse('Thu, 01 Jan 1970 00:00:00 UTC+0400'):----" + Date.parse('Thu, 01 Jan 1970 00:00:00 UTC+0400') + "<br>");
</script>
</body>
</html>
Date.UTC()方法:
参数:
接受的参数与日期构造函数接受最多参数时一样。
Date.UTC(year,month[,date[,hrs[,min[,sec[,ms]]]]])
结果:
返回从 1970-1-1 00:00:00 UTC 到指定日期的毫秒数。
UTC 方法与 Date 有两点不同:
1.Date.UTC 方法使用协调世界时代替本地时间。
2.Date.UTC 方法返回一个时间数值,而不是一个日期对象。
example:
<!DOCTYPE html>
<html lang="zh-cmn-hans">
<head>
<meta charset="utf-8">
<title>Title</title>
<style>
body {
line-height: 180%;
}
</style>
</head>
<body>
<script>
//Date.UTC()
document.write("new Date(Date.UTC(2018,3,15,12)):----" + new Date(Date.UTC(2018,2,15,12)) + "<br>");
document.write("new Date(2018,3,15,12):----" + new Date(2018,2,15,12) + "<br>");
</script>
</body>
</html>