JS日期和时间

JavaScript基础语法

来源:现代JavaScript教程

第六部分 日期和时间

1、创建

new Date() 不带参数,——创建一个表示当前日期的对象

let now = new Date();
alert( now ); //Mon Oct 31 2022 18:40:12 GMT+0800 (中国标准时间)

new Date(milliseconds) 带参数,参数是时间戳,创建一个 Date 对象,输出从1970/1/1 8点整到经过这个毫秒值后的时间。

let Jan01_1970 = new Date(0);
alert( Jan01_1970 ); //Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)

// 现在增加 24 小时
let Jan02_1970 = new Date(24 * 3600 * 1000);
alert( Jan02_1970 ); //Fri Jan 02 1970 08:00:00 GMT+0800 (中国标准时间)

new Date(datestring) 参数是字符串,参数被自动解析

let date = new Date("2017-01-26");
alert(date);  //Thu Jan 26 2017 08:00:00 GMT+0800 (中国标准时间)
//未指定具体时间,代码的运行结果可能与时区有关

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

  • year:4位数, eg:1998
  • month: 范围从0到11, 即1月到12月
  • date:当月具体的某一天,默认为1
  • 如果 hours/minutes/seconds/ms 缺失,则均为默认值 0。
new Date(2011, 0, 1); // 1 Jan 2011, 00:00:00
//最大精确到1毫秒
let date = new Date(2011, 0, 1, 2, 3, 4, 567);
alert( date ); // 1.01.2011, 02:03:04.567
2、访问日期组件
  • getFullYear() 获取年份(4 位数)
  • getMonth() 获取月份,从 0 到 11。
  • getDate() 获取当月的具体日期,从 1 到 31。
  • getHours(),getMinutes(),getSeconds(),getMilliseconds() 获取相应的时间。
  • getDay() 获得一周中的第几天,从0(周日)到6(周六)。
    以上的所有方法返回的组件都是基于当地时区的。
  • getTime() 返回日期的时间戳 —— 从 1970-1-1 00:00:00 UTC+0 开始到现在所经过的毫秒数。
  • getTimezoneOffset() 返回 UTC(世界统一时间) 与本地时区之间的时差,以分钟为单位。
3、设置日期组件
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。
4、自动校准

如果设置了超时间范围的数值,超出范围的日期会被自动分配。

//创建日期 2016-2-28
let date = new Date(2016, 1, 28);
date.setDate(date.getDate() + 2);
//是否闰年也不需要考虑,Date会帮我们处理
alert( date ); // 1 Mar 2016

//这个特性常被用来获取给定时间段后的日期,
//获取70秒后的日期
let date = new Date();
date.setSeconds(date.getSeconds() + 70);

alert( date ); // Mon Oct 31 2022 19:48:49 GMT+0800 (中国标准时间)

//还可以设置为0甚至是负数
let date = new Date(2016, 0, 2); // 2016 年 1 月 2 日
date.setDate(1); // 设置为当月的第一天
alert( date );

date.setDate(0); // 天数最小可以设置为 1,所以这里设置的是上一月的最后一天
alert( date ); // 31 Dec 2015
5、日期转化为数字、日期差值
let date = new Date();
//日期转化为数字,得到的是对应的时间戳
alert(+date); // 以毫秒为单位的数值,与使用 date.getTime() 的结果相同

//这个作用可以用于时间测量:

let start = new Date(); // 开始测量时间
// do the job
for (let i = 0; i < 100000; i++) {
  let doSomething = i * i * i;
}
let end = new Date(); // 结束测量时间
alert( `The loop took ${end - start} ms` );

如果仅仅想获取时间戳,有一个特殊的方法Date.now(),它会返回当前时间戳,相当于 new Date().getTime(),Date.now()不需要创建Date对象,性能更好

6、基准测试

在对一个很耗 CPU 性能的函数进行可靠的基准测试(Benchmarking)时,例如,我们想判断以下两个计算日期差值的函数哪个更快?这种性能测量通常称为“基准测试(benchmark)”。

// 我们有 date1 和 date2,哪个函数会更快地返回两者的时间差?
function diffSubtract(date1, date2) {
  return date2 - date1;
}

// or
function diffGetTime(date1, date2) {
  return date2.getTime() - date1.getTime();
}

测试方法

7、Date.parse

Date.parse(str) 方法可以从一个字符串中读取日期。
字符串的格式应该为:YYYY-MM-DDTHH:mm:ss.sssZ,其中:

  • YYYY-MM-DD —— 日期:年-月-日。
  • 字符 “T” 是一个分隔符。
  • HH:mm:ss.sss —— 时间:小时,分钟,秒,毫秒。
  • 可选字符 ‘Z’ 为 ±hh:mm 格式的时区。单个字符 Z 代表 UTC+0 时区。

简短形式也是可以的,比如 YYYY-MM-DD 或 YYYY-MM,甚至可以是 YYYY。
Date.parse(str) 调用会解析给定格式的字符串,并返回时间戳(自 1970-01-01 00:00:00 起所经过的毫秒数)。如果给定字符串的格式不正确,则返回 NaN。

let ms = Date.parse('2012-01-26T13:51:50.417-07:00');
alert(ms); // 1327611110417  (时间戳)

可以根据时间戳再创建一个日期对象:

let date = new Date( Date.parse('2012-01-26T13:51:50.417-07:00') );
alert(date);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值