【JavaScript 漫游】【013】Date 对象知识点摘录

2024-02-10 12:20

本文主要是介绍【JavaScript 漫游】【013】Date 对象知识点摘录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

img

文章简介

本文为【JavaScript 漫游】专栏的第 013 篇文章,记录了 JS 语言中 Date 对象的重要知识点。

  1. 普通函数的用法
  2. 构造函数的用法
  3. 日期的运算
  4. 静态方法,包括:Date.now()Date.parse()Date.UTC()
  5. 实例方法,包括:Date.prototype.valueOf()to 类方法、get 类方法和 set 类方法

普通函数的用法

Date 对象可以作为普通函数直接调用,返回一个代表当前时间的字符串。

Date();
// 'Wed Feb 07 2024 17:03:14 GMT+0800 (中国标准时间)'

注意,即使带有参数,Date 作为普通函数使用时,返回的还是当前时间。

Date(2019, 9, 1);
// 'Wed Feb 07 2024 17:05:18 GMT+0800 (中国标准时间)'

构造函数的用法

Date 还可以当作构造函数使用。对它使用 new 命令,会返回一个 Date 对象的实例。如果不加参数,实例代表的就是当前时间。

var today = new Date();

Date 实例有一个独特的地方。其他对象求值的时候,都是默认调用 .valueOf() 方法,但是Date 实例求值的时候,默认调用的是toString()方法。这导致对Date实例求值,返回的是一个字符串,代表该实例对应的时间。

var today = new Date();
today;
// 等同于
today.toString();
// Wed Feb 07 2024 17:09:08 GMT+0800 (中国标准时间)

作为构造函数时,Date 对象可以接受多种格式的参数,返回一个该参数对应的时间实例。

// 参数为时间零点开始计算的毫秒数
new Date(1707297016159);
// Wed Feb 07 2024 17:10:16 GMT+0800 (中国标准时间)// 参数为日期字符串
new Date('Feb, 6, 2024');
// Tue Feb 06 2024 00:00:00 GMT+0800 (中国标准时间)// 参数为多个整数
// 代表年、月、日、小时、分钟、秒、毫秒
new Date(2024, 2, 6, 15, 26, 33);
// Wed Mar 06 2024 15:26:33 GMT+0800 (中国标准时间)

关于 Date 构造函数的参数,有几点说明。

第一点,参数可以是负整数,代表1970年元旦之前的时间。

new Date(-1707297016159);
Thu Nov 25 1915 22:49:43 GMT+0800 (中国标准时间)

第二点,只要是能被Date.parse()方法解析的字符串,都可以当作参数。

new Date('2024-2-6');
new Date('February, 15, 2024');
new Date('FEB, 6, 2024');
// ...

第三点,参数为年、月、日等多个整数时,年和月是不能省略的,其他参数都可以省略的。也就是说,这时至少需要两个参数,因为如果只使用年这一个参数,Date 会将其解释为毫秒数。

new Date(2024);
// Thu Jan 01 1970 08:00:02 GMT+0800 (中国标准时间)

各个参数的取值范围如下。

  • 年:使用四位数年份,比如 2000。如果写成两位数或个位数,则加上 1900 ,即 10 代表 1910年。如果是负数,表示公元前
  • 月:0 表示一月,依次类推,11 表示12月
  • 日:131
  • 小时:023
  • 分钟:059
  • 秒:059
  • 毫秒:0999

注意,月份从 0 开始计算,但是,天数从 1 开始计算。另外,除了日期的默认值为 1,小时、分钟、秒钟和毫秒的默认值都是 0

这些参数如果超出了正常范围,会被自动折算。比如,如果月设为 15,就折算为下一年的 4 月。

new Date(2024, 15);
// Tue Apr 01 2025 00:00:00 GMT+0800 (中国标准时间)
new Date(2024, 0, 0);
// Sun Dec 31 2023 00:00:00 GMT+0800 (中国标准时间)

参数还可以使用负数,表示扣去的时间。

new Date(2024, -1);
// Fri Dec 01 2023 00:00:00 GMT+0800 (中国标准时间)
new Date(2024, 0, -1);
// Sat Dec 30 2023 00:00:00 GMT+0800 (中国标准时间)

日期的运算

类型自动转换时,Date 实例如果转为数值,则等于对应的毫秒数;如果转为字符串,则等于对应的日期字符串。所以,两个日期实例对象进行减法运算时,返回的是它们间隔的毫秒数;进行加法运算时,返回的是两个字符串连接而成的新字符串。

new Date(2024, 2, 6) - new Date(2024, 2, 5);
// 86400000
new Date(2024, 2, 6) + new Date(2024, 2, 5);
// 'Wed Mar 06 2024 00:00:00 GMT+0800 (中国标准时间)Tue Mar 05 2024 00:00:00 GMT+0800 (中国标准时间)'

静态方法

Date.now()

返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数。

Date.now(); // 1707298447468

Date.parse()

用来解析日期字符串,返回该时间距离时间零点的毫秒数。

日期字符串应该符合YYYY-MM-DDTHH:mm:ss:sssZ 格式,其中最后的 Z 表示时区。但是,其他格式也可以被解析。

Date.parse('Feb 6, 2024');
Date.parse('2024-2-6');
Date.parse('2024-2-6T17:36:00');
// ...

如果解析失败,返回 NaN

Date.UTC()

Date.UTC() 接受年、月、日等变量作为参数,返回该时间距离时间零点的毫秒数。

Date.UTC(2024, 2, 6, 17, 45, 45, 666);
// 1709747145666

该方法的参数用法与 Date 构造函数完全一致,比如月从 0 开始计算,日期从 1 开始计算。区别在于 Date.UTC 方法的参数,会被解释为 UTC 时间(世界标准时间),Date 构造函数的参数会被解释为当前时区的时间。

实例方法

Date 的实例对象,有几十个自己的方法,除了 valueOftoString ,可以分为以下三类。

  • to 类:从 Date 对象返回一个字符串,表示指定的时间
  • get 类:获取 Date 对象的日期和时间
  • set 类:设置Date 对象的日期和时间

Date.prototype.valueOf()

返回实例对象距离时间零点对应的毫秒数,等同于 getTime 方法

new Date().valueOf();
new Date().getTime();
// 1707299455536

to 类方法

  • Date.prototype.toString() :返回一个完整的日期字符串
  • Date.prototype.toUTCString():返回对应的 UTC 时间的日期字符串
  • Date.prototype.toISOString():返回符合 ISO8601 写法的日期字符串
  • Date.prototype.toJSON():符合 JSON 格式的 ISO 日期字符串
  • Date.prototype.toDateString():返回日期字符串(不含小时、分和秒)
  • Date.prototype.toTimeString():返回时间字符串(不含年月日)
  • Date.prototype.toLocaleString():完整的本地时间
  • Date.prototype.toLocaleDateString():本地日期(不含小时、分和秒)
  • Date.prototype.toLocaleTimeString():本地时间(不含年月日)

get 类方法

  • Date.prototype.getTime():返回实例距离时间零点的毫秒数,等同于 valueOf()
  • Date.prototype.getDate():返回实例对象对应每月的几号(从 1 开始)
  • Date.prototype.getDay():返回星期几,星期日为0,星期一为1,以此类推
  • Date.prototype.getFullYear():返回四位的年份
  • Date.prototype.getMonth():返回月份(0表示1月,11表示12月)
  • Date.prototype.getHours():返回小时(0-23)
  • Date.prototype.getMilliseconds():返回毫秒(0-999)
  • Date.prototype.getMinutes():返回分钟(0-59)
  • Date.prototype.getSeconds():返回秒(0-59)
  • Date.prototype.getTimezoneOffset():返回当前时间与 UTC 的时区差异,以分钟表示,返回结果考虑到了夏令时因素。

Date 对象还提供了这些方法对应的 UTC 版本,用来返回 UTC 时间:getUTCDate()getUTCFullYear()getUTCMonth()getUTCDay()getUTCHours()getUTCMinutes()getUTCSeconds()getUTCMilliseconds()

set 类方法

  • Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳
  • Date.prototype.setFullYear(year [, month, date]):设置四位年份
  • Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)
  • Date.prototype.setMilliseconds():设置毫秒(0-999)
  • Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)
  • Date.prototype.setMonth(month [, date]):设置月份(0-11)
  • Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)
  • Date.prototype.setTime(milliseconds):设置毫秒时间戳

同样的,这些方法也有对应的 UTC 版本:setUTCDate()setUTCFullYearsetUTCHours()setUTCMilliseconds()setUTCMinutes()setUTCMonth()setUTCSeconds()

这篇关于【JavaScript 漫游】【013】Date 对象知识点摘录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/697096

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows