浅谈JavaScript Date日期和时间对象


Posted in Javascript onDecember 29, 2014

Date 日期和时间对象

1. 介绍

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

2. 构造函数

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

3. 属性

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

4. 实例方法

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

4.1 get方法
4.1.1 getFullYear() :返回Date对象的年份值;4位年份。

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

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

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

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

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

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

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

4.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')

4.2 set方法
4.2.1 setFullYear(year, opt_month, opt_date) :设置Date对象的年份值;4位年份。

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

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

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

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

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

4.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毫秒

4.3 其他方法
4.3.1 toString() :将Date转换为一个'年月日 时分秒'字符串

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

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

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

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

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

4.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')

5. 静态方法

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

参数:无

返回值:

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

示例:

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

5.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!)

6. 实际操作

6.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

6.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分

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

示例:

var dt1 = new Date('2015/12/01');

var dt2 = new Date('2015/12/25');

console.log(dt1 > dt2); // => false
Javascript 相关文章推荐
Javascript里使用Dom操作Xml
Sep 20 Javascript
JavaScript Prototype对象
Jan 07 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
Mar 10 Javascript
浅析javascript的return语句
Dec 15 Javascript
动态创建按钮的JavaScript代码
Jan 29 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
JavaScript中this关键字用法实例分析
Aug 24 Javascript
JavaScript中的几种继承方法示例
Dec 06 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 #Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
Dec 29 #Javascript
浅谈JavaScript Array对象
Dec 29 #Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 #Javascript
jQuery中dequeue()方法用法实例
Dec 29 #Javascript
jQuery中queue()方法用法实例
Dec 29 #Javascript
浅谈JavaScript function函数种类
Dec 29 #Javascript
You might like
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
幼教简历自我评价
2014/01/28 职场文书
业务部主管岗位职责
2014/01/29 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技