整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript中Date对象的那些事儿

击右上方红色按钮关注“web秀”,让你真正秀起来

前言

任何事情都离不开时间,太阳每天升起的时间,每天你上班的时间,中午吃饭时间等等。在编程生涯中,无时无刻都有一个时间来引导,如数据创建时间(createTime),更新时间(updateTime)等。今天来说说JavaScript的Date对象。


开始

var date = new Date();

这时的时间是当前时间。

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

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


JavaScript中Date对象的那些事儿


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

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

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


JavaScript中Date对象的那些事儿


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


JavaScript中Date对象的那些事儿


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


JavaScript中Date对象的那些事儿


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


JavaScript中Date对象的那些事儿


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

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

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


JavaScript中Date对象的那些事儿


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

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

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

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

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

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

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

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

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


JavaScript中Date对象的那些事儿


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


JavaScript中Date对象的那些事儿


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


JavaScript中Date对象的那些事儿


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

Date()和new Date()

上面的例子里有用到Date()和new 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位,可以表示至少到263,经过各种不严密计算,可以算出64位二进制至少可以表示2924.7亿年,应该就不用担心系统挂掉的问题了┑( ̄Д  ̄)┍。

公告

喜欢小编的点击关注,了解更多知识!


构建的应用程序的时候都会带有日期时间组件,无论是资源的创建日期还是活动的时间戳。在本文中,我将分享如何在JavaScript中以各种格式获取当前日期。

1、JavaScript的Date对象

const date = new Date();

该Date对象包含一个Number,表示从新纪元(即1970年1月1日)起经过的毫秒数。你可以将日期字符串传递给Date构造函数以创建指定日期的对象:

const date = new Date('Jul 12 2011');

要获取当前年份,可以使用对象的getFullYear()方法。getFullYear()方法在Date构造函数中返回指定日期的年份:

const currentYear = date.getFullYear();
console.log(currentYear); //2020

同样,有一些方法可以获取当月的当前日期和当前的月份:

const today = date.getDate();
const currentMonth = date.getMonth() + 1;

该getDate()方法返回每月的当前日期(1-31)。使用getMonth()方法返回指定日期的月份,需要注意的一点是,该方法返回0索引值(0-11),其中0表示一月,11表示十二月。因此,加1可以使月份的值标准化。

2、Date now

now()是Date对象的静态方法。它以毫秒为单位的值返回,该值表示从纪元以来所经过的时间。你可以将now()方法返回的毫秒数传递给Date构造函数以实例化新Date对象:

const timeElapsed = Date.now();
const today = new Date(timeElapsed);

3、格式化日期

你可以使用Date对象的方法将日期格式化为多种格式(GMT,ISO等)。该toDateString()方法以我们可读的格式返回日期:

today.toDateString(); // "Sun Jun 16 2020"

toISOString()返回遵循ISO 8601扩展格式的日期:

today.toISOString(); // "2020-06-16T08:30:00.000Z"

toUTCString()以UTC时区格式返回日期:

today.toUTCString(); // "Sat, 16 Jun 2020 08:30:00 GMT"

toLocaleDateString()以地区区时的格式返回日期:

today.toLocaleDateString(); // "6/16/2020"

4、自定义日期格式器功能

除了上面提到的格式外,你的应用程序可能具有不同的数据格式。它可以是yy/dd/mm或yyyy-dd-mm格式,或者类似的格式。为了解决这个问题,最好创建一个可重用的函数,以便可以在多个项目中使用它。因此,接下来,让我们创建一个实用程序函数,该函数将以函数参数中指定的格式返回日期:

const today = new Date();
function formatDate(date, format) {
    //
}
formatDate(today, 'mm/dd/yy');

你需要使用参数中传递格式字符串中的月份,日期和年份分别替换字符串“ mm”,“ dd”,“ yy”。然后,使用replace(),如下所示的方法:

format.replace('mm', date.getMonth() + 1);

但是,这将导致很多methods连接在一起,并且会让我们尝试把函数变得更灵活更适合我们的项目时产生麻烦:

  .replace('yy', date.getFullYear())
  .replace('dd', date.getDate());

然后可以使用正则表达式代替methods来连接methods replace()。首先创建一个对象,该对象将代表子字符串的键值对及其各自的值:

const formatMap = {
    mm: date.getMonth() + 1,
    dd: date.getDate(),
    yy: date.getFullYear().toString().slice(-2),
    yyyy: date.getFullYear()
};

接下来,使用正则表达式匹配并替换字符串:

formattedDate = format.replace(/mm|dd|yy|yyy/gi, matched => map[matched]);

完整的功能及代码如下所示:

function formatDate(date, format) {
    const map = {
        mm: date.getMonth() + 1,
        dd: date.getDate(),
        yy: date.getFullYear().toString().slice(-2),
        yyyy: date.getFullYear()
    }
 
    return format.replace(/mm|dd|yy|yyy/gi, matched => map[matched])
}

你还可以在函数中添加格式化时间戳的功能。

5、最后

你现在对DateJavaScript 中的对象有更好的了解。你也可以使用其他第三方库(例如datesj和)moment来处理应用程序中的日期。

ate 对象

Date 对象用于处理日期与实际。

创建 Date 对象: new Date().

以上四种方法同样可以创建 Date 对象:

var d = new Date();

var d = new Date(milliseconds);

var d = new Date(dateString);

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);


Date 对象属性

属性描述
constructor返回对创建此对象的 Date 函数的引用。
prototype使您有能力向对象添加属性和方法。

Date 对象方法

方法描述
getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear()从 Date 对象以四位数字返回年份。
getHours()返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds()返回 Date 对象的毫秒(0 ~ 999)。
getMinutes()返回 Date 对象的分钟 (0 ~ 59)。
getMonth()从 Date 对象返回月份 (0 ~ 11)。
getSeconds()返回 Date 对象的秒数 (0 ~ 59)。
getTime()返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset()返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate()根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay()根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCFullYear()根据世界时从 Date 对象返回四位数的年份。
getUTCHours()根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMilliseconds()根据世界时返回 Date 对象的毫秒(0 ~ 999)。
getUTCMinutes()根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCMonth()根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCSeconds()根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getYear()已废弃。 请使用 getFullYear() 方法代替。
parse()返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate()设置 Date 对象中月的某一天 (1 ~ 31)。
setFullYear()设置 Date 对象中的年份(四位数字)。
setHours()设置 Date 对象中的小时 (0 ~ 23)。
setMilliseconds()设置 Date 对象中的毫秒 (0 ~ 999)。
setMinutes()设置 Date 对象中的分钟 (0 ~ 59)。
setMonth()设置 Date 对象中月份 (0 ~ 11)。
setSeconds()设置 Date 对象中的秒钟 (0 ~ 59)。
setTime()setTime() 方法以毫秒设置 Date 对象。
setUTCDate()根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCFullYear()根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours()根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMilliseconds()根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
setUTCMinutes()根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCMonth()根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCSeconds()setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。
setYear()已废弃。请使用 setFullYear() 方法代替。
toDateString()把 Date 对象的日期部分转换为字符串。
toGMTString()已废弃。请使用 toUTCString() 方法代替。
toISOString()使用 ISO 标准返回字符串的日期格式。
toJSON()以 JSON 数据格式返回日期字符串。
toLocaleDateString()根据本地时间格式,把 Date 对象的日期部分转换为字符串。
toLocaleTimeString()根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleString()据本地时间格式,把 Date 对象转换为字符串。
toString()把 Date 对象转换为字符串。
toTimeString()把 Date 对象的时间部分转换为字符串。
toUTCString()根据世界时,把 Date 对象转换为字符串。
UTC()根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。
valueOf()返回 Date 对象的原始值。