Date对象的那些事儿

栏目: 服务器 · 发布时间: 5年前

内容简介:前两天做了个需求需要Unix时间戳和北京时间的各种转换,其中Date对象用到的极多,今天就来讲讲我所了解到的Date对象。hin简单~

前两天做了个需求需要Unix时间戳和北京时间的各种转换,其中Date对象用到的极多,今天就来讲讲我所了解到的Date对象。

这就开始了

hin简单~

var date = new Date();

这时的时间是当前时间。

那么Date都可以用什么来作为 参数 呢?

1、Date对象可以使用指定时间到1970年1月1日00:00:00 UTC的 毫秒数 做参数。

Date对象的那些事儿

看到上面的结果是不是有点奇怪,当参数为0时返回的不应该是1970年1月1日00:00:00吗?这里应该是使用了格林尼治标准时间作为计时标准,中国的时间比格林威治标准时间快8个小时,所以就是8点,而不是0点啦。(突然想到周董的一段歌词,“我占据格林威治守候着你,在时间标准起点回忆过去,你却在永夜了的极地旅行”,格林威治是世界计算时间和地理经度的起点,但是现在GMT时间已经不再被科学界确定,还有一个最接近GMT的世界时间标准,就是UTC啦)

2、参数也可以是( 年,月,日,时,分,秒 ),其中至少需要两个整数,否则就会被当做1中例子里的毫秒数了。

这里的月份是0~11,所以下面的例子月份为5时是June六月

Date对象的那些事儿

当然,这里的参数也可以是 负数 ,就表示相对当前设定时间扣掉的时间。比如下图第一个例子,月份使用了负数,于是就从2015年1月1日为基准,扣掉五个月,变为了2014年8月

Date对象的那些事儿

3、我们再看看0,1,-1这三个特殊数字做参数的情况。如果年份使用0,则表示的是1900年,为负数就变成了公元前。

Date对象的那些事儿

4、当然,除了整数,还可以用 日期的字符串 作为参数

Date对象的那些事儿

任意搭配都可以得到正确的时间,棒棒哒!

Date对象中有很多 方法 ,这里我只挑一些常用的来说下。

1、 Date() 返回当前的时间

Date对象的那些事儿

无论你在中间加什么参数,永远返回当前时间

Date对象的那些事儿

2、 getDate() 返回指定时间的某一天(1~31)

getDay()返回指定时间的星期数(0~6)

getMonth()  返回指定时间的月份(0~11)

getFullYear()返回指定时间的四位数年份

 getHours()返回指定时间的小时(0~23)

getMinutes()返回指定时间的分钟数(0~59)

getSeconds()返回指定时间的秒数(0~59)

getMilliseconds()返回指定时间的毫秒数(0~999)

Date对象的那些事儿

3、 getTime() 返回1970年1月1日00:00:00到指定时间的毫秒数,就是UNIX时间数的1000倍

Date对象的那些事儿

也就是说,UNIX时间和时间字符串相互转换可以这样

Date对象的那些事儿

除了getTime(),将时间字符串转换成毫秒数的方法还有 +Date()Number(Date)Date.parse()

Date对象的那些事儿

Date()和new Date()

上面的例子里有用到Date()和new Date(),返回结果的状态也是不同的,在这里总结一下。

Date对象的那些事儿

可以看出,Date()无论有没有参数都是返回的当前时间的字符串,而new Date()会根据参数返回对应时间的字符串

分分钟写个小日历

使用Date()对象的一个简单的应用当然就是写日历了~

首先,我们需要判断当前月份的第一天是星期几

var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var firstDay,
  getFirstDay;
function getFirstDay (year, month)  {
    firstDay = new Date(year, month, 1);
    getFirstDay = firstDay.getDay();
}

然后再判断当前月份的天数。选用的办法是使用当前月份下个月的1日的时间减去1个小时,这样就回到了当前月份最后一天,再获取当前日期即可。

function getMonthDays (year, month) {
    var nextMonth = new Date(year, month + 1, 1),
           getMonthDays;
    nextMonth.setHours(nextMonth.getHours() - 1);
    getMonthDays = nextMonth.getDate();
}

剩下的就是将数据填充到表格里就可以啦~

但是日历并不只能看当前月份,还可以查前一个月后一个月,那么只需要加两个按钮,点击后月份减1或加1即可。

具体代码在下面~

https://github.com/yanagao/Date.git

1970年的元旦

众所周知,所有的编程语言都是要从1970年1月1日开始计算时间,这个时间是有什么特殊的含义吗?在1970年的元旦0点0分0秒到底发生了什么?

上面我们提到了一个UNIX时间,就是指从1970年1月1日0时0分0秒起至现在的总秒数。我们都知道,系统有32位也有64位,那么如果把UNIX时间用32位二进制数表示,只能够表示到2147483647秒,也就是到 Tue Jan 19 2038 11:14:07 这个时间就是极限了,超过这个时间,就会变成负数,系统就挂了。在以前那个只有32位操作系统的年代,可能觉得38年之前就会有解决办法吧(⊙﹏⊙)b。年初的时候流传了iPhone变砖的方法,如果你把iPhone的系统时间调到1970年1月1日,重启手机就变砖了,不舍得用自己手机试验的同学纷纷去了苹果体验店。有网友就猜测,因为中国在东8区,比格林威治时间快8个小时,也就是说北京时间1970年1月1日00:00:00对应的是1969年12月31日16:00:00,UNIX时间为负,所以手机变砖,但是没法证实这个猜测的正确性┑( ̄Д  ̄)┍。

现在的操作系统大部分都为64位,可以表示至少到2 63 ,经过各种不严密计算,可以算出64位二进制至少可以表示2924.7亿年,应该就不用担心系统挂掉的问题了┑( ̄Д  ̄)┍。


以上所述就是小编给大家介绍的《Date对象的那些事儿》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective C++

Effective C++

梅耶 (Scott Meyers) / 侯捷 / 电子工业出版社 / 2011-1-1 / 65.00元

《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界项级C++大师scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机......一起来看看 《Effective C++》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码