JavaScript提供了Date对象来操作日期和时间。Date对象的值用一个整数来表示,它是自1970年1月1日0时到所代表的时间的好描述(1秒=1000毫秒)。正值表示该日期之后的时间,负值表示该日期之前的时间。这种表示方式与Unix系统中日期时间的表示方式是完全相同的。
由于客户端的JavaScript程序是在浏览器中运行的,Date对象返回客户端计算机的时间,而不是服务器上的时间。Date对象有6种创建方式,它们的语法为:
var now = new Date();//创建一个新的Date对象,其值为创建对象时计算机的日期时间
var myDate = new Date("month dd, yyyy,hh,mm,ss");
var myDate = new Date("month dd, yyyy");
var myDate = new Date(yyyy, mm, dd, hh, mm, ss);
var myDate = new Date(yyyy, mm, dd);
var myDate = new Date(milliseconds);
第一种格式中没有任何参数,它创建一个新的Date对象,其值为创建对象时计算机上的日期时间。
第二种语法格式创建一个新的Date对象,并按照"月日年时分秒"的格式为Date对象指定初始日期值。
第三种语法格式创建一个新的Date对象,并按照"月日年"的格式为Date对象指定初始日期值。
第四种语法格式创建一个新的Date对象,并按照"年月日时分秒"的格式为Date对象指定初始日期值。
第五种语法格式创建一个新的Date对象,并按照"年月日"的格式为Date对象指定初始日期值。
第六种语法格式创建一个新的Date对象,并用从1970年1月1日0时倒指定时间之间的毫秒总数为Date对象指定初始日期值。
Date对象只有一个属性prototype
,这是一个静态属性,用于为当前文档中的Date对象添加新的属性和方法。
Date对象的方法
Date()方法有两种格式:一种使用本地的日期时间进行运算;另一种格式的方法名称中包含"UTC"字符串,它使用通用时间(格林威治时间GTM或通用协调时间UTC)进行运算。下面表格中为了查阅方便,采用简略的形式书写方法的名称,例如,名称gey[UTC]Date()
代表了两个方法:getDate()
和getUTCDate()
,它们具有的功能相同,只不过前一个方法使用的是本地时间进行操作,后一个方法使用通用时间进行操作。
| 方法 | 描述 |
|-------------------------------------------|------------------------------------------------------------|
| get[UTC]Date() | 返回日期是月份中的第几天。有效值在1-31之间 |
| get[UTC]Day() | 返回日期是星期几。0表示星期天,...,6表示星期六 |
| get[UTC]FullYear() | 返回日期中4个数字表示的年份,例如2015 |
| get[UTC]Hours() | 返回日期中小时字段的值,有效值在0-23之间 |
| get[UTC]Milliseconds() | 返回日期中毫秒字段的值 |
| get[UTC]Minutes() | 返回日期中分钟字段的值,有效值在0-59之间 |
| get[UTC]Month() | 返回日期中月份字段的值,有效值在0-11之间 |
| get[UTC]Seconds() | 返回日期中秒字段的值,有效值在0-59之间 |
| getTime() | 返回日期的内部毫秒数表示值,即从1970年1月1日午夜到Date对象表示的日期之间的毫秒数,该数值与时区无关 |
| getTimezoneOffset() | 返回Date对象所表示日期的本地时间于UTC时间之间的差值,以分钟为单位 |
| getYear() | (已废弃) 返回两个数字表示的年份,该方法已经被getFullYear()
所取代 |
| set[UTC]Date(day_of_month) | 设置日期中日字段的值,返回值用调整后日期的毫秒数表示(自1970年1月1日午夜到Date对象所表示日期之间的毫秒数) |
| set[UTC]FullYear(year,month,day) | 使用年、月、日字段设置日期,月、日字段可选。返回值用调整后日期的毫秒数表示 |
| set[UTC]Hours(hours,mins,secs,ms) | 使用时、分、秒和毫秒设置日期时间,分、秒和毫秒字段可选。返回值用调整后日期的毫秒数表示 |
| set[UTC]Milliseconds(millis) | 设置日期中毫秒字段的值,参数millis的值必须在0-999之间。返回值用调整后日期的毫秒数表示 |
| set[UTC]Minutes(minutes,seconds,millis) | 使用分、秒和毫秒设置日期时间,秒和毫秒字段可选。返回值用调整后日期的毫秒数表示 |
| set[UTC]Month(month,day) | 使用月和日字段设置日期,日字段可选。返回值用调整后日期的毫秒数表示 |
| set[UTC]Seconds(seconds,millis) | 使用秒和毫秒设置日期时间,毫秒字段可选。返回值用调整后日期的毫秒数表示 |
| setTime(millis) | 使用日期的内部毫秒数设置日期值。返回值用调整后日期的毫秒数表示(即与参数millis的值相同) |
| setYear(year) | **(已废弃)**使用两位数字的年份设置日期中的年份 |
| toDateString() | 返回Date对象代表的日期时间中日期的字符串表示,采用本地时区表示日期 |
| toGMTString() | **(已废弃)**返回采用GMT时区、以字符串表示的日期时间 |
| toLocaleDateString() | 返回Date对象代表的日期时间中日期的字符串表示,采用本地时区表示日期,并使用本地日期格式进行格式转换 |
| toLocaleString() | 将日期时间转换为字符串并返回,使用本地时区和本地日期格式进行格式转换 |
| toLocaleTimeString() | 返回Date对象代表的日期时间中时间的字符串表示,采用本地时区表示,并使用本地时间格式进行格式转换 |
| toString | 返回日期时间的字符串表示,使用本地时区 |
| toTimeString() | 返回Date对象代表的日期时间中时间的字符串表示,采用本地时区表示时间 |
| toUTCString | 返回日期时间的字符串表示,使用UTC时区 |
| valueOf() | 返回日期内部毫秒数表示的值,于getTime()方法的功能完全相同 |
除了上述与日期对象实例相关的方法之外,Date对象还提供了两个于Date对象实例无关的方法,它们必须使用Date()构造函数本身来调用,而不能通过Date对象实例来调用。它们是Date对象的静态方法。
| 方法 | 描述 | |------------------------------------------|----------------------------------------------| | Date.parse(date) | 分析字符串形式表示的日期时间,并返回该日期时间对应的内部毫秒数表示值 | | Date.UTC(year,month,day,hour,min,sec,ms) | 将UTC时区的"年月日时分秒"值转换为对应的日期时间内部毫秒数,并返回该内部毫秒数表示值 |
应用举例
下面来列举一些例子:点击下面的按钮来获取当前时间的不同表示。
本地时间(new Date())当前时间toDateString()toGMTString()toLocaleDateString()toLocaleString()toLocaleTimeString()toString()toTimeString()toUTCStringvalueOf()
日期时间返回结果
日期时间运算
这个小例子计算两个日期之间的天数,有时候我们需要知道距离某个特定的日期还有多少天,多少小时,多少分钟,这都需要对日期进行计算。下面的例子在输入框中输入一个日期,然后就可以计算出当前日期距离这个日期还有多少天。
请输入一个日期(格式为:xxxx-xx-xx):开始计算
计算返回结果
相关代码为:
var dateStr = $("#input-date").val();
var dateArr = dateStr.split("-");
var future = new Date(parseInt(dateArr[0]),parseInt(dateArr[1])-1,parseInt(dateArr[2]));
var now = new Date();
//计算两个日期之间的毫秒数的差值
var diff = Math.abs(future.getTime() - now.getTime());
//将毫秒数转换为天数
var days = Math.ceil(diff/(1000*60*60*24));
$("#date-results-2").text(dateStr + "与今天相距 " +days+ " 天");
在上面的代码中,使用了字符串的分割函数split()
,这将在后面介绍。在使用年月日来构建日期对象时,需要注意的是月份是从0开始计数的,所以要将实际的月份减去1。最后使用了Marh对象的abs()
方法来获取两个日期之间的毫秒数的差值,再使用ceil
方法来截取天数。
扩展Date()对象的功能
例用Date对象的prototype
属性,我们可以为Date对象创建新的属性和方法。下面我们将利用这个特性,通过创建新的方法,让日期对象能够返回中文表示的星期名称。
请输入一个日期(格式为:xxxx-xx-xx):获取日期
返回结果
上面例子的实现代码为:首先编写一个函数,使用数组来保存对应的中文星期名称,并可通过下标来将之返回。
function weekDay(){
var now = this.getDay();
var names = new Array(7);
names[0] = "星期天";
names[1] = "星期一";
names[2] = "星期二";
names[3] = "星期三";
names[4] = "星期四";
names[5] = "星期五";
names[6] = "星期六";
return names[now];
}
然后通过Date对象的prototype
实现来扩展Date对象的方法。
Date.prototype.DayOfWeek = weekDay;
接着我们就可以像使用其它Date对象的方法一样使用DayOfWeek
方法了。
var now = = new Date();
$("#date-results-3").text("输入的日期为: " +now.toLocaleDateString()+ " "+now.DayOfWeek());