日月如梭,玩转JavaScript日期

一、Date对象

下面出现的源码都可以codepen在线查看

1)时间戳毫秒计算

Date对象是基于“1970-01-01 08:00:00”到指定日期的毫秒数,不是“00:00:00”。

一天由86,400,000毫秒组成。

var begin = new Date(1970,0,1,0,0,0);//-28800000begin = new Date(1970,0,1,8,0,0);//0

通过上面的代码打印结果,可以看到是相对于8点的毫秒数。

PHP中的时间戳是秒,所以在和PHP互动的时候,要除以1000换算成秒。

2)构造函数

Date的构造函数可以传多种组合的参数:

var date1 = new Date("January 20,2017 11:11:05");var date2 = new Date("January 20,2017");var date3 = new Date("2017/01/20 11:11:05");var date4 = new Date("2017/01/20");var date5 = new Date(2017,0,20,11,11,5); //月份从0~11var date6 = new Date(2017,0,20);var date7 = new Date(1484881865000);

二、Date对象方法

这里只列出部分,更多方法可以参考《JavaScript Date 对象

下面是图片,不用选中复制了,想复制就点击上面的地址!

月份的范围是“0-11”,而不是“1-12”。

var date = new Date(); //获取一个时间对象var year = date.getFullYear();  // 获取完整的年份(4位,1970)var month = date.getMonth();  // 获取月份(0-11,0代表1月,用的时候记得加上1)var day = date.getDate();  // 获取日(1-31)var hour = date.getHours();  // 获取小时数(0-23)var minute = date.getMinutes();  // 获取分钟数(0-59)var second = date.getSeconds();  // 获取秒数(0-59)var week = date.getDay();  // 获取一周中的某一天(0-6) 其中周日是0周六是6

三、日期转换时间戳

1. 人类比较喜欢的格式是“2017-01-20 11:11:05:123”;

2. 浏览器更喜欢的格式是“2017/01/20 11:11:05:123

第一种格式在转换为时间戳的时候,会有兼容问题,下图所示,更多兼容问题可以参考《JavaScript Date parsing behavior

可以分两步走,第一步是将格式替换为浏览器喜欢的,第二步是使用方法获取。

1)格式替换

下面的替换用到了简单的正则,更多正则替换可以参考《飞起来的正则表达式

var dateStr = ‘2017-01-20 11:11:05:123‘;
date = new Date(dateStr); //传入一个时间格式,如果不传入就是获取现在的时间了,这样做IOS做Date.parse会返回null//另外一种方式date = new Date(dateStr.replace(/-/g, ‘/‘));

2)获取时间戳

用到了4种获取方式,隐式类型转换、getTimevalueOfDate.parse

前面3种精确到毫秒,而第4种只能精确到

time1 = +date;//隐式类型转换time2 = date.getTime();
time3 = date.valueOf();//与getTime功能一样,该方法通常在 JavaScript 内部被调用,而不是在代码中显式调用。time4 = Date.parse(date);//只能精确到秒

其中隐式转换相当于下面的代码:

function(){ 
    return Number(new Date); 
}

上面的代码用到Number对象做转换。

还有更多的方法或对象,例如Boolean、String、Number、parseFloat、parseInt、ToInt32等,可以参考《Javascript Type-Conversion

“+”加号这个符号,可以将不同数据类型转成不同的值,具体行为可以参考《The unary + operator

四、常用扩展

1)计算相隔天数

两个日期相减,再除以各种时间单位的换算。

Math.abs(start - end) / 60 / 60 / 1000 / 24;

2)某个月的第一天

设置年月日,天设置为1,最终生成一个日期对象。

new Date(date.getFullYear(), date.getMonth(), 1);

3)某个月的最后一天

同样是三个参数,但最后一个天设置为0,月份设置为下一个月。

new Date(date.getFullYear(), date.getMonth()+1, 0)

4)某个月所在季度的第一天

日期的月份先除以3,再通过符号“~~”获取到整数部分(0、1、2或3),再乘以3获取到季度的第一个月。

//~~作用是将数字转化为32位有符号整数 舍去小数不做四舍五入new Date(date.getFullYear(), ~~(date.getMonth()/3)*3, 1);

5)某个月所在季度的最后一天

计算方式与上面相同,不同的月份是再加“3”。

new Date(date.getFullYear(), ~~(date.getMonth()/3)*3 + 3, 0)

6)判断是否是闰年

月份设置3月,天设置0,就能获取到2月份的最后一天。

new Date(date.getFullYear(), 2, 0).getDate() == 29

7)某个月份的天数

设置这个日期的下一个月,天数为0。

new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()

还有大家经常会用到的格式化,例如date.format(‘YYYY年MM月DD日‘),返回“2017年01月20日”。

网上有很多代码实现方式,这里就不介绍了。

时间: 2024-11-05 21:51:55

日月如梭,玩转JavaScript日期的相关文章

JavaScript日期时间对象的创建与使用(三)

时钟效果一: 代码: <html> <head> <meta charset="utf-8"/> <title>JavaScript日期时间对象的创建与使用</title> </head> <body> <h2 id="time"></h2> <script type="text/javascript"> function Cl

javascript日期处理库-Datejs.js

原文:http://code.google.com/p/datejs/wiki/APIDocumentation javascript日期处理库-Datejs.js 当天时间 Date.today(); 比较两个时间大小,返回-1,0,1 var today = Date.today(); var past = Date.today().add(-6).days(); var future = Date.today().add(6).days(); Date.compare(today, fut

JavaScript 日期格式化 简单实用

JavaScript 日期格式化 简单实用 代码如下,引入jquery后直接后加入以下代码刷新可测试 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.

JavaScript日期时间操作

js日期操作: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1970-????)myDate.getMonth(); //获取当前月份(0-11,0代表1月)myDate.getDate(); //获取当前日(1-31)myDate.getDay(); //获取当前星期X(0-6,0代表星期天)myDate.getTime(); //获取当前时间(从1970.1

Javascript日期时间表现形式互转

在一门语言里,一个日期时间一定有3种表现形式,字符串(如2010-11-11 05:07:08),Long型(一般是1970年1月1日至今的毫秒数),内置对象(在Javascript中就是Date): 那么日期时间操作很常用的一个就是上述三种表现形式的互转和格式化(各种格式的字符串): moment是Javascript的一个日期时间库,使用它可以很方便的实现上述三种表现形式的互转和字符串表现形式的格式化. 日期时间类型的三种表现形式,字符串是给人读的,Long在传递信息时速度更快,内置对象起到

[Javascript] 一定能用到的Javascript日期处理类库大全

JavaScript的日期处理我们经常用到,可是JavaScript自带的日期对象总还是薄弱了些,这里列举的这几个类库完全可以满足你的日常需要. 1. XDate 这个类库是javascript本地日期对象的封装,提供了加强的方法来帮助你解析,格式化和日期处理. 使用它就类似使用javascript自己的方法,所以非常简单,相信大家会喜欢的! (转 载请注明出处:[url=http://www.live588.org]淘金盈[/url] [url=http://www.tswa.org]博彩 通

JavaScript日期组件的实现

旅游频道的开发中需要定义各种日期组件,有的是基本的日期选择, 这个基本日期只包含如下功能 左右翻(月) 点击天回填到输入域 点击"今天",回填今天的日期到输入域 点击"关闭",日期控件关闭 有的同时显示两个月的日期 有的包含一些业务信息,比如机票搜索结果页的低价日历. 这个比上面的要复杂一些 每天的日期格子里含有价格信息 点击左右箭头会向后退请求更新每天的低价机票信息 且点击每天的格子是会重新查询 这里记录下一个基本日历组件的要点 一.html结构 这里以table

JavaScript日期对象使用总结

javascript Date日期对象的创建 创建一个日期对象: var objDate=new Date([arguments list]); 我总结了参数形式主要有以下3种: new Date("month dd yyyy hh:mm:ss"); //后面的hh:mm:ss可选(不选的话就是默认的开始时间),而且前三项的顺序可以随意,甚至各字段后面可以加逗号 new Date(yyyy,mth,dd,hh,mm,ss); //除了前两个字段(年.月字段)外,其余的都是可选的(不选的

[Javascript] 5个最佳的Javascript日期处理类库

在大家日常网站开发和web应用开发中,我们往往需要有效的调用Javascript处理日期和时间格式相关的函数,在Javascript中已经包含了部分最基本的内建处理方法. 在大家日常网站开发和web应用开发中,我们往往需要有效的调用Javascript处理日期和时间格式相关的函数,在Javascript中已经包含了部分最基本的内建处理方法.当然如果大家有时间的话,完全可以自己开发和编写需要的方法,但是有效的使用别人已经开发好的类库肯定是一个更好的处理方式,没有必要什么都原创吧,君子善假于物也.今