JS日期和时间

日期和时间

让我们一起学习一个新的内建对象:日期(Date)。该对象存储日期和时间,并提供了日期/时间的管理方法。
例如,我们可以使用它来存储创建/修改时间,或者用来测量时间,再或者仅用来打印当前时间。

创建

创建一个新的 Date 对象,只需要调用 new Date(),再调用时可以带有下面这些参数之一:
new Date()
不带参数 —— 创建一个表示当前日期和时间的 Date 对象:

let now = new Date();
alert(now);  //显示当前的日期/时间

new Date(milliseconds)
创建一个 Date 对象,其时间等于 1970年 1月 1日 UTC+0 之后经过的毫秒数(1/1000秒)。

// 0 表示 01.01.1970 UTC+0
let Jan01_1970 = new Date(0);
alert(Jan01_1970);

//现在增加24小时,得到 02.01.1970 UTC+0
let Jan02_1970 = new Date(24*3600*1000);
alert(Jan02_1970);

传入的整数参数代表的是自 1970-01-01 00:00:00 以来经过的毫秒数,该整数被称为 时间戳

这是一种日期的轻量级数字表示形式。我们通常使用 new Date(timestamp) 通过时间戳来创建日期,并可以使用 date.getTime() 将现有的 Date 对象转化为时间戳(下文会讲到)。

在 01.01.1970 之前的日期带有负的时间戳,例如:

//31 Dec 1969
let Dec31_1969 = new Date(-24 * 3600 * 1000);
alert(Dec31_1969);

new Date(datestring)
如果只有一个参数,并且是字符串,那么它会被自动解析。该算法与 Date.parse 所使用的算法相同,我们将在下文中进行介绍。

let date = new Date("2017-01-26");
alert(date);
// 该时间未被设定,因此被假定为格林尼治标准时间(GMT)的午夜(midnight)
// 并会根据你运行代码时的时区进行调整
// 因此,结果可能是
// Thu Jan 26 2017 11:00:00 GMT+1100 (Australian Eastern Daylight Time)
// 或
// Wed Jan 25 2017 16:00:00 GMT-0800 (Pacific Standard Time)

new Date(year, month, date, hours, minutes, seconds, ms)
使用当前时区中给定组件创建日期。只有前两个参数是必须的。

  • year 必须是四位数:2013 是合法的,98 是不合法的。
  • month 计数从 0 (一月)开始,到 11(十二月)结束。
  • date 是当月的具体某一天,如果缺失,则为默认值 1
  • 如果 hours/minutes/second/ms 缺失,则均为默认值 0.
    例如:
new Date(2011, 0, 1, 0, 0, 0, 0);  //1 Jan 2011, 00:00:00
new Date(2011, 0, 1);  //同样,时分秒等均为默认值 0

时间度量最大精确到 1 毫秒(1/1000秒):

let date = new Date(2011, 0, 1, 2, 3, 4, 567);
alert(date);  //1.01.2011, 02:03:04.567

访问日期组件

Date 对象中访问年、月等信息有多种方式:

getFullYear()
获取年份(4位数)

getMonth()
获取月份,从 0 到 11

getDate()
获取当月的具体日期,从 1 到 31,这个方法名称可能看起来有些令人疑惑。

getHours(), getMinutes(), getSeconds(), getMilliseconds()
获取相应的时间组件。

另外,我们还可以获取一周中的第几天:

getDay()
获取一周中的第几天,从 0(星期日)到 6 (星期六)。第一天始终是星期日,在某些国家可能不是这样的习惯,但是这不能被改变。

注意

不是 getYear(),而是 getFullYear()
很多 JavaScript 引擎都实现了一个非标准化的方法 getYear()。不推荐使用这个方法。它有时候可能会返回 2 位的年份信息。永远都不要使用它。要获取年份就使用 getFullYear()

设置日期组件

下列方法可以设置日期/时间组件:

  • setFullYear(year, [month], [date])
  • setMonth(month, [date])
  • setDate(date)
  • setHours(hour, [min], [sec], [ms])
  • setMinutes(min, [sec], [ms])
  • setSeconds(sec, [ms])
  • setMilliseconds(ms)
  • setTime(milliseconds) (使用自 1970-01-01 00:00:00 UTC+0 以来的毫秒数来设置整个日期)。

举个例子:

let today = new Date();

today.setHours(0);
alert(today);  //日期依然是今天,但是小时数被改为了0

today.setHours(0,0,0,0);
alert(today);  //日期依然是今天,时间为 00:00:00
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容