JavaScript Date对象详解


Posted in Javascript onMarch 01, 2016

本篇主要介绍 Date 日期和时间对象的操作,具体内容如下

目录
1. 介绍:阐述 Date 对象。

2. 构造函数:介绍 Date 对象的构造函数new Date()几种方式。

3. 实例方法:介绍 Date 对象的get、set等实例方法。

4. 静态方法:介绍 Date 对象的静态方法:Date.now()、 Date.parse()等。

5. 实际操作:介绍 Date 对象的一些示例:获取倒计时、比较2个Date对象的大小等等。

一. 介绍
1.1 说明

Date对象,是操作日期和时间的对象。Date对象对日期和时间的操作只能通过方法。

1.2 属性

无;Date对象对日期和时间的操作只能通过方法。

二. 构造函数
2.1 new Date() :返回当前的本地日期和时间

参数:无

返回值:

{Date} 返回一个表示本地日期和时间的Date对象。

示例:

var dt = new Date();
console.log(dt); // => 返回一个表示本地日期和时间的Date对象

2.2 new Date(milliseconds) :把毫秒数转换为Date对象

参数:

①milliseconds {int} :毫秒数;表示从'1970/01/01 00:00:00'为起点,开始叠加的毫秒数。

注意:起点的时分秒还要加上当前所在的时区,北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00'

返回值:

{Date} 返回一个叠加后的Date对象。

示例:

var dt = new Date(1000 * 60 * 1); // 前进1分钟的毫秒数
console.log(dt); // => {Date}:1970/01/01 08:01:00
dt = new Date(-1000 * 60 * 1); // 倒退1分钟的毫秒数
console.log(dt); // => {Date}:1970/01/01 07:59:00

2.3 new Date(dateStr) :把字符串转换为Date对象

参数:

①dateStr {string} :可转换为Date对象的字符串(可省略时间);字符串的格式主要有两种:

1) yyyy/MM/dd HH:mm:ss (推荐):若省略时间,返回的Date对象的时间为 00:00:00。

2) yyyy-MM-dd HH:mm:ss :若省略时间,返回的Date对象的时间为 08:00:00(加上本地时区)。若不省略时间,此字符串在IE中会转换失败!

返回值:

{Date} 返回一个转换后的Date对象。

示例:

var dt = new Date('2014/12/25'); // yyyy/MM/dd
console.log(dt); // => {Date}:2014/12/25 00:00:00
dt = new Date('2014/12/25 12:00:00'); // yyyy/MM/dd HH:mm:ss
console.log(dt); // => {Date}:2014/12/25 12:00:00
 
dt = new Date('2014-12-25'); // yyyy-MM-dd
console.log(dt); // => {Date}:2014-12-25 08:00:00 (加上了东8区的时区)
dt = new Date('2014-12-25 12:00:00'); // yyyy-MM-dd HH:mm:ss (注意:此转换方式在IE中会报错!)
console.log(dt); // => {Date}:2014-12-25 12:00:00

2.4 new Date(year, month, opt_day, opt_hours, opt_minutes, opt_seconds, opt_milliseconds) :把年月日、时分秒转换为Date对象

参数:

①year {int} :年份;4位数字。如:1999、2014

②month {int} :月份;2位数字。从0开始计算,0表示1月份、11表示12月份。

③opt_day {int} 可选:号; 2位数字;从1开始计算,1表示1号。

④opt_hours {int} 可选:时;2位数字;取值0~23。

⑤opt_minutes {int} 可选:分;2位数字;取值0~59。

⑥opt_seconds {int} 可选:秒;2未数字;取值0~59。

⑦opt_milliseconds {int} 可选:毫秒;取值0~999。

返回值:

{Date} 返回一个转换后的Date对象。

示例:

var dt = new Date(2014, 11); // 2014年12月(这里输入的月份数字为11)
console.log(dt); // => {Date}:2014/12/01 00:00:00
dt = new Date(2014, 11, 25); // 2014年12月25日
console.log(dt); // => {Date}:2014/12/25 00:00:00
dt = new Date(2014, 11, 25, 15, 30, 40); // 2014年12月25日 15点30分40秒
console.log(dt); // => {Date}:2014/12/25 15:30:40
dt = new Date(2014, 12, 25); // 2014年13月25日(这里输入的月份数字为12,表示第13个月,跳转到第二年的1月)
console.log(dt); // => {Date}:2015/01/25

三. 实例方法

Date对象的实例方法主要分为2种形式:本地时间和UTC时间。同一个方法,一般都会有此2种时间格式操作(方法名带UTC的,就是操作UTC时间),这里主要介绍对本地时间的操作。 

3.1 get方法

3.1.1 getFullYear() :返回Date对象的年份值;4位年份。

3.1.2 getMonth() :返回Date对象的月份值。从0开始,所以真实月份=返回值+1 。

3.1.3 getDate() :返回Date对象的月份中的日期值;值的范围1~31 。

3.1.4 getHours() :返回Date对象的小时值。

3.1.5 getMinutes() :返回Date对象的分钟值。

3.1.6 getSeconds() :返回Date对象的秒数值。

3.1.7 getMilliseconds() :返回Date对象的毫秒值。

3.1.8 getDay() :返回Date对象的一周中的星期值;0为星期天,1为星期一、2为星期二,依此类推

3.1.9 getTime() :返回Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00') 。

示例:

dt.getFullYear(); // => 2014:年
dt.getMonth(); // => 11:月;实际为12月份(月份从0开始计算)
dt.getDate(); // => 25:日
dt.getHours(); // => 15:时
dt.getMinutes(); // => 30:分
dt.getSeconds(); // => 40:秒
dt.getMilliseconds(); // => 333:毫秒
dt.getDay(); // => 4:星期几的值
dt.getTime(); // => 1419492640333 :返回Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

3.2 set方法

3.2.1 setFullYear(year, opt_month, opt_date) :设置Date对象的年份值;4位年份。

3.2.2 setMonth(month, opt_date) :设置Date对象的月份值。0表示1月,11表示12月。

3.2.3 setDate(date) :设置Date对象的月份中的日期值;值的范围1~31 。

3.2.4 setHours(hour, opt_min, opt_sec, opt_msec) :设置Date对象的小时值。

3.2.5 setMinutes(min, opt_sec, opt_msec) :设置Date对象的分钟值。

3.2.6 setSeconds(sec, opt_msec) :设置Date对象的秒数值。

3.2.7 setMilliseconds(msec) :设置Date对象的毫秒值。

示例:

var dt = new Date();
dt.setFullYear(2014); // => 2014:年
dt.setMonth(11); // => 11:月;实际为12月份(月份从0开始计算)
dt.setDate(25); // => 25:日
dt.setHours(15); // => 15:时
dt.setMinutes(30); // => 30:分
dt.setSeconds(40); // => 40:秒
dt.setMilliseconds(333); // => 333:毫秒
console.log(dt); // => 2014年12月25日 15点30分40秒 333毫秒

3.3 其他方法

3.3.1 toString() :将Date转换为一个'年月日 时分秒'字符串

3.3.2 toLocaleString() :将Date转换为一个'年月日 时分秒'的本地格式字符串

3.3.3 toDateString() :将Date转换为一个'年月日'字符串

3.3.4 toLocaleDateString() :将Date转换为一个'年月日'的本地格式字符串

3.3.5 toTimeString() :将Date转换为一个'时分秒'字符串

3.3.6 toLocaleTimeString() :将Date转换为一个'时分秒'的本地格式字符串

3.3.7 valueOf() :与getTime()一样, 返回Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

示例:

var dt = new Date();
console.log(dt.toString()); // => Tue Dec 23 2014 22:56:11 GMT+0800 (中国标准时间) :将Date转换为一个'年月日 时分秒'字符串
console.log(dt.toLocaleString()); // => 2014年12月23日 下午10:56:11 :将Date转换为一个'年月日 时分秒'的本地格式字符串
 
console.log(dt.toDateString()); // => Tue Dec 23 2014 :将Date转换为一个'年月日'字符串
console.log(dt.toLocaleDateString()); // => 2014年12月23日 :将Date转换为一个'年月日'的本地格式字符串
 
console.log(dt.toTimeString()); // => 22:56:11 GMT+0800 (中国标准时间) :将Date转换为一个'时分秒'字符串
console.log(dt.toLocaleTimeString()); // => 下午10:56:11 :将Date转换为一个'时分秒'的本地格式字符串
 
console.log(dt.valueOf()); // => 返回Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

四. 静态方法
4.1 Date.now()

说明:返回当前日期和时间的Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

参数:无

返回值:

{int} :当前时间与起始时间之间的毫秒数。

示例:

console.log(Date.now()); // => 1419431519276

4.2 Date.parse(dateStr)

说明:把字符串转换为Date对象 ,然后返回此Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')

参数:

①dateStr {string} :可转换为Date对象的字符串(可省略时间);字符串的格式主要有两种:

1) yyyy/MM/dd HH:mm:ss (推荐):若省略时间,返回的Date对象的时间为 00:00:00。

2) yyyy-MM-dd HH:mm:ss :若省略时间,返回的Date对象的时间为 08:00:00(加上本地时区)。若不省略时间,此字符串在IE中返回NaN(非数字)!

返回值:

{int} 返回转换后的Date对象与起始时间之间的毫秒数。

示例:

console.log(Date.parse('2014/12/25 12:00:00')); // => 1419480000000
console.log(Date.parse('2014-12-25 12:00:00')); // => 1419480000000 (注意:此转换方式在IE中返回NaN!)

五. 实际操作
5.1 C#的DateTime类型转换为Js的Date对象

说明:C#的DateTime类型通过Json序列化返回给前台的格式为:"\/Date(1419492640000)\/" 。中间的数字,表示DateTime的值与起始时间之间的毫秒数。

示例:

后台代码:简单的ashx

public void ProcessRequest (HttpContext context) {
 System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
 DateTime dt = DateTime.Parse("2014-12-25 15:30:40");
 string rs = js.Serialize(dt); // 序列化成Json
 context.Response.ContentType = "text/plain";
 context.Response.Write(rs);
}

前台代码:

var dateTimeJsonStr = '\/Date(1419492640000)\/'; // C# DateTime类型转换的Json格式
var msecStr = dateTimeJsonStr.toString().replace(/\/Date\(([-]?\d+)\)\//gi, "$1"); // => '1419492640000' :通过正则替换,获取毫秒字符串
var msesInt = Number.parseInt(msecStr); // 毫秒字符串转换成数值
var dt = new Date(msesInt); // 初始化Date对象
console.log(dt.toLocaleString()); // => 2014年12月25日 下午3:30:40

5.2  获取倒计时

说明:计算当前时间离目的时间相差多少天时分。

示例:

/**
* 返回倒计时
* @param dt {Date}:目的Date对象
* @return {Strin} :返回倒计时:X天X时X分
*/
function getDownTime(dt) {
 // 1.获取倒计时
 var intervalMsec = dt - Date.now(); // 目的时间减去现在的时间,获取两者相差的毫秒数
 var intervalSec = intervalMsec / 1000; // 转换成秒数
 var day = parseInt(intervalSec / 3600 / 24); // 天数
 var hour = parseInt((intervalSec - day * 24 * 3600) / 3600); // 小时
 var min = parseInt((intervalSec - day * 24 * 3600 - hour * 3600) / 60); // 分钟
 
 // 2.若相差的毫秒小于0 ,表示目的时间小于当前时间,这时的取的值都是负的:-X天-时-分,显示时,只显示天数前面为负的就行。
 if (intervalMsec < 0) {
  hour = 0 - hour;
  min = 0 - min;
 }
 
 // 3.拼接字符串并返回
 var rs = day + '天' + hour + '时' + min + '分';
 return rs;
}
 
// 当前时间:2014/12/28 13:26
console.log(getDownTime(new Date('2015/06/01'))); // => 154天10时33分
console.log(getDownTime(new Date('2014/01/01'))); // => -361天13时26分

5.3 比较2个Date对象的大小

说明:可以对比2者的与起始时间的毫秒数,来区分大小。

示例:

var dt1 = new Date('2015/12/01');
var dt2 = new Date('2015/12/25');
console.log(dt1 > dt2); // => false

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Jquery 表单取值赋值的一些基本操作
Oct 11 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
如何用JavaScript定义一个类
Sep 12 Javascript
jQuery 选择器详解
Jan 19 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
Apr 12 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
Dec 22 Javascript
JavaScript运动框架 多物体任意值运动(三)
May 17 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
解决layui动态加载复选框无法选中的问题
Sep 20 Javascript
微信小程序关键字变色实现代码实例
Dec 13 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 #Javascript
jQuery增加与删除table列的方法
Mar 01 #Javascript
JavaScript如何实现组合列表框中元素移动效果
Mar 01 #Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 #Javascript
JavaScript Array对象详解
Mar 01 #Javascript
jQuery计算文本框字数及限制文本框字数的方法
Mar 01 #Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 #Javascript
You might like
php强制用户转向www域名的方法
2015/06/19 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python如何基于redis实现ip代理池
2020/01/17 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
三年级语文教学反思
2014/02/01 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
机关作风建设整改方案
2014/10/27 职场文书
2014年计生工作总结
2014/11/21 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
科技活动总结范文
2015/05/11 职场文书