JavaScript开发:日期对象在开发中的使用总结

本文以《JavaScript高级程序设计》第4版作为基础参考,整理使用JavaScript开发过程中,日期对象使用相关的知识点。

本文是开发知识点系列第七篇。

  1. 第一篇:JavaScript开发中变量、常量声明的规矩总结
  2. 第二篇:JavaScript开发:数据类型知识总结
  3. 第三篇:JavaScript开发:使用Number数据类型需要注意的问题
  4. 第四篇:JavaScript开发:操作符在实际开发中的使用总结
  5. 第五篇:JavaScript开发:流程控制语句在实际开发中的使用总结
  6. 第六篇:JavaScript开发:函数在实际开发中的使用总结(1)

Date对象用于处理日期和时间,其提供了多种方法和属性,可以用于创建、解析、操作和格式化日期和时间。

早期的Date类型参考了Java早期版本中的java.util.Date。Date类型将日期保存为自协调世界时(UTC,Universal Time Coordinated)时间1970年1月1日午夜(零时)至今所经过的毫秒数。使用这种存储格式,Date类型可以精确表示1970年1月1日之前以及之后285,616年的日期。

要创建日期对象,只需要使用new操作符调用Date构造函数就可以

js 复制代码
let now= new Date();

在不给Date构造函数传参数的情况下,创建的对象将保存当前日期和时间。基于其它日期和时间创建日期对象,必须传入其毫秒表示(UNIX纪元1970年1月1日午夜之后的毫秒数)。

另外,Date的参数还可以为

  1. 时间戳:new Date(milliseconds)会创建一个表示从1970年1月1日00:00:00 UTC(协调世界时)到指定毫秒数的日期和时间的Date对象。

  2. 日期字符串:new Date(dateString)会创建一个表示由指定的日期和时间字符串表示的日期和时间的Date对象。

  3. 日期的各个部分:new Date(year, month[, day[, hour[, minute[, second[, millisecond]]]]])也会创建一个表示指定的日期和时间的Date对象。

以下是一些示例:

javascript 复制代码
var date1 = new Date(); // 当前日期和时间
var date2 = new Date(1627471200000); // 2021-07-28T12:00:00.000Z
var date3 = new Date('2022-01-01'); // 2022-01-01T00:00:00.000Z
var date4 = new Date(2022, 0, 1); // 2022-01-01T00:00:00.000Z

请注意,月份是从0开始的,所以1月是0,2月是1,以此类推。

  1. Date的参数还可以是另一个Date的实例:新的Date对象将表示与传入的Date对象相同的日期和时间。这可以用于复制一个Date对象
javascript 复制代码
var date1 = new Date(); // 当前日期和时间
var date2 = new Date(date1); // 与date1相同的日期和时间

console.log(date1); // 输出date1的日期和时间
console.log(date2); // 输出date2的日期和时间,应该与date1相同

上述代码date2是通过传入date1作为参数来创建的。因此,date2表示与date1相同的日期和时间。

请注意,尽管date1date2表示相同的日期和时间,但它们是两个不同的对象。如果修改了date1的日期或时间,date2的日期和时间不会改变,反之亦然。

Date对象的静态方法

Date对象有3个静态方法:

  1. Date.now():返回当前时间的时间戳,即从1970年1月1日00:00:00 UTC到现在的毫秒数。例如:

    javascript 复制代码
    let timestamp = Date.now();
    console.log(timestamp); // 输出当前时间的时间戳

    该方法很多时候用来获取当前的时间戳,另外就是获取时间戳还可以使用+new Date()

    javascript 复制代码
    let timestamp = +new Date();
    console.log(timestamp); // 输出当前时间的时间戳
  2. Date.parse(dateString):解析一个表示特定日期的字符串,并返回从1970年1月1日00:00:00 UTC到该日期的毫秒数。如果该字符串不能表示一个日期,则返回NaN。例如:

    javascript 复制代码
    let timestamp = Date.parse('2022-01-01');
    console.log(timestamp); // 输出'2022-01-01'这个日期的时间戳
    
    var timestamp1 = Date.parse('March 21, 2022');
    console.log(timestamp1); // 输出'2022-03-21'这个日期的时间戳
    
    var timestamp2 = Date.parse('2022-12-31T23:59:59Z');
    console.log(timestamp2); // 输出'2022-12-31T23:59:59Z'这个日期的时间戳
  3. Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]]):接受的参数与构造函数new Date()一样,但它返回的是从1970年1月1日00:00:00 UTC到指定日期的毫秒数,而不是一个Date对象。例如:

    javascript 复制代码
    let timestamp = Date.UTC(2022, 0, 1);
    console.log(timestamp); // 输出'2022-01-01 00:00:00 UTC'这个日期的时间戳
    
    var timestamp3 = Date.UTC(2022, 11, 31, 23, 59, 59);
    console.log(timestamp3); // 输出'2022-12-31T23:59:59Z'这个日期的时间戳
    
    var timestamp4 = Date.UTC(2022, 2, 21);
    console.log(timestamp4); // 输出'2022-03-21T00:00:00Z'这个日期的时间戳

Date对象继承的方法

JavaScript的Date对象继承自Object,因此它继承了Object的所有方法,如toString()valueOf()等。然而,Date对象重写了一些方法,以提供更适合处理日期和时间的功能

  1. toString():在Object中,这个方法返回一个表示该对象的字符串。在Date中,这个方法被重写以返回一个表示该日期和时间的字符串。例如:
javascript 复制代码
var date = new Date();
console.log(date.toString()); // 输出类似于"Wed Jul 28 2021 14:00:00 GMT+0800 (China Standard Time)"的字符串
  1. valueOf():在Object中,这个方法返回对象的原始值。在Date中,这个方法被重写以返回日期的时间戳,即从1970年1月1日00:00:00 UTC到该日期的毫秒数。例如:
javascript 复制代码
var date = new Date();
console.log(date.valueOf()); // 输出类似于1627447200000的数字
  1. toLocaleString():在Object中,这个方法返回一个表示该对象的字符串,该字符串与执行该方法的环境的语言设置有关。在Date中,这个方法被重写以返回一个表示该日期和时间的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript 复制代码
var date = new Date();
console.log(date.toLocaleString()); // 在美国英语环境中,输出类似于"7/28/2021, 2:00:00 PM"的字符串

以上只是一部分被Date对象重写的方法,还有其他一些方法,如toDateString()toTimeString()toISOString()等,也都是Date对象特有的。可自行测试。

Date对象格式化的方法

JavaScript的Date对象还提供了多种方法来格式化日期和时间。以下是一些常用的方法:

  1. toDateString():返回一个表示该日期的日期部分(不包括时间)的字符串。例如:
javascript 复制代码
var date = new Date();
console.log(date.toDateString()); // 输出类似于"Wed Jul 28 2021"的字符串
  1. toTimeString():返回一个表示该日期的时间部分(不包括日期)的字符串。例如:
javascript 复制代码
var date = new Date();
console.log(date.toTimeString()); // 输出类似于"14:00:00 GMT+0800 (China Standard Time)"的字符串
  1. toISOString():返回一个表示该日期的ISO 8601扩展格式的字符串。例如:
javascript 复制代码
var date = new Date();
console.log(date.toISOString()); // 输出类似于"2021-07-28T06:00:00.000Z"的字符串
  1. toLocaleDateString():返回一个表示该日期的日期部分(不包括时间)的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript 复制代码
var date = new Date();
console.log(date.toLocaleDateString()); // 在美国英语环境中,输出类似于"7/28/2021"的字符串
  1. toLocaleTimeString():返回一个表示该日期的时间部分(不包括日期)的字符串,该字符串与执行该方法的环境的语言设置有关。例如:
javascript 复制代码
var date = new Date();
console.log(date.toLocaleTimeString()); // 在美国英语环境中,输出类似于"2:00:00 PM"的字符串

上面是一部分格式化日期和时间的方法,还有其他一些方法,如toLocaleString()toUTCString()等,也可以用于格式化日期和时间。

开发中Date对象的常规使用方法

在实际开发中,Date对象常用于处理日期和时间相关的操作。以下是一些常规的使用方法:

  1. 获取当前日期和时间:
javascript 复制代码
var now = new Date();
console.log(now); // 输出当前日期和时间
  1. 获取特定日期和时间:
javascript 复制代码
var specificDate = new Date('2022-01-01T00:00:00');
console.log(specificDate); // 输出2022年1月1日的午夜
  1. 获取日期和时间的各个部分:
javascript 复制代码
var now = new Date();
console.log(now.getFullYear()); // 输出年份
console.log(now.getMonth()); // 输出月份(0-11,0表示1月)
console.log(now.getDate()); // 输出日期(1-31)
console.log(now.getHours()); // 输出小时(0-23)
console.log(now.getMinutes()); // 输出分钟(0-59)
console.log(now.getSeconds()); // 输出秒数(0-59)
console.log(now.getMilliseconds()); // 输出毫秒数(0-999)
  1. 设置日期和时间的各个部分:
javascript 复制代码
var now = new Date();
now.setFullYear(2022); // 设置年份为2022
now.setMonth(0); // 设置月份为1月
now.setDate(1); // 设置日期为1日
now.setHours(0); // 设置小时为0
now.setMinutes(0); // 设置分钟为0
now.setSeconds(0); // 设置秒数为0
now.setMilliseconds(0); // 设置毫秒数为0
console.log(now); // 输出2022年1月1日的午夜
  1. 比较两个日期:
javascript 复制代码
var date1 = new Date('2022-01-01T00:00:00');
var date2 = new Date();
if (date1.getTime() === date2.getTime()) {
    console.log('两个日期相等');
} else if (date1.getTime() < date2.getTime()) {
    console.log('date1在date2之前');
} else {
    console.log('date1在date2之后');
}

6.时间转换

将格林尼治时间转为东八区时间

js 复制代码
var gmtDate = new Date('2022-01-01T00:00:00Z'); // 创建一个表示格林尼治时间的Date对象
console.log(gmtDate.toLocaleString()); // 输出东八区时间的字符串表

也可以采用下面的方式转换

js 复制代码
let gmtDate = new Date('2022-01-01T00:00:00Z'); // 创建一个表示格林尼治时间的Date对象
let offset = gmtDate.getTimezoneOffset() * 60 * 1000; // 获取当前时区和格林尼治时间的毫秒差
let localDate = new Date(gmtDate.getTime() - offset); // 创建一个表示东八区时间的Date对象
console.log(localDate); // 输出东八区时间的Date对象

不同日期、时间记录的标准和解释

日期和时间的记录有多种国际标准

  1. ISO 8601:这是一个由国际标准化组织制定的日期和时间的表示方法。它的基本格式是"YYYY-MM-DDTHH:mm:ss.sssZ",其中"YYYY"表示年份,"MM"表示月份,"DD"表示日期,"T"是时间的开始,"HH"表示小时,"mm"表示分钟,"ss.sss"表示秒和毫秒,"Z"表示协调世界时。例如,"2022-01-01T00:00:00.000Z"表示2022年1月1日的协调世界时的午夜。

  2. RFC 2822:这是一个由互联网工程任务组制定的日期和时间的表示方法,主要用于电子邮件和HTTP协议。它的格式是"Day, DD Mon YYYY HH:mm:ss +ZZZZ",其中"Day"表示星期几,"DD"表示日期,"Mon"表示月份,"YYYY"表示年份,"HH:mm:ss"表示时间,"+ZZZZ"表示时区。例如,"Fri, 01 Jan 2022 00:00:00 +0000"表示2022年1月1日的协调世界时的午夜。

  3. UNIX时间戳:这是一个表示从1970年1月1日00:00:00 UTC到某个时间点的秒数的数字。例如,"1640995200"表示2022年1月1日的协调世界时的午夜。

上面同时也是日期和时间的一部分表示方法,还有其他一些方法,如美国的"MM/DD/YYYY"格式,欧洲的"DD.MM.YYYY"格式等。

不同日期、时间记录的标准之间如何进行转换?上面三种记录格式都可以作为Date对象参数,可以通过先转成Date对象再转为特定标准格式

  1. UTC(协调世界时)Date对象的toUTCString方法可以将日期和时间转换为UTC格式的字符串。

    javascript 复制代码
    var date = new Date();
    console.log(date.toUTCString()); // 输出:"Mon, 14 Feb 2022 08:23:17 GMT"
  2. ISO 8601(国际标准化组织的日期和时间表示法)Date对象的toISOString方法可以将日期和时间转换为ISO 8601格式的字符串。

    javascript 复制代码
    var date = new Date();
    console.log(date.toISOString()); // 输出:"2022-02-14T08:23:17.123Z"
  3. Unix时间戳(自1970年1月1日00:00:00 UTC开始的毫秒数)Date对象的getTime方法可以获取Unix时间戳,而Date对象的构造函数可以接受一个Unix时间戳来创建一个新的Date对象。

    javascript 复制代码
    var date = new Date();
    var timestamp = date.getTime();
    console.log(timestamp); // 输出:1644825797123
    
    var newDate = new Date(timestamp);
    console.log(newDate.toString()); // 输出:"Mon Feb 14 2022 16:23:17 GMT+0800 (中国标准时间)"

总结一下

  1. Date对象可以有参数也可以没有参数使用,Date参数的几种形式?
  2. Date的静态方法有三个:Date.now()Date.parse(dateString)Date.UTC(year, month[, day[, hour[, minute[, second[, millisecond]]]]]),都返回的是时间戳
  3. Date重写了toString()valueOf()方法,toString()返回一个表示该日期和时间的字符串,valueOf()返回日期的时间戳
  4. toLocaleString()这个方法被重写以返回一个表示该日期和时间的字符串,该字符串与执行该方法的环境的语言设置有关
  5. Date对象格式化的方法,根据显示需要返回特定格式
  6. 知道三种日期和时间的记录国际标准
  7. 知道怎么进行不同记录标准进行转换:先转成对象,再转为特定格式

本文完。

相关推荐
Redstone Monstrosity5 分钟前
字节二面
前端·面试
东方翱翔12 分钟前
CSS的三种基本选择器
前端·css
Fan_web35 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei196243 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝44 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
又写了一天BUG1 小时前
npm install安装缓慢及npm更换源
前端·npm·node.js