取而代之,以后不用再 new Date() 了

Date背景


众所周知,在 1995 年,Brendan(JavaScript之父) 被网景公司安排了一个巨大而紧急的工作任务,用 10 天的时间来编写 JavaScript 语言。而 日期处理 是几乎所有编程语言的基本部分,所以JavaScript 也必须拥有它。

这是一个非常复杂的领域,但留给作者编写它的时间却很短。最终 Brendan 选择了借鉴当时红极一时的 java 语言,从java.Util.Date日期实现中复制了 Javascript 的日期对象。坦率地说,这个实现很糟糕。事实上 Java 在两年后的 1.1 版本中就弃用和替换这种实现。然而 20 年后,我们仍然在 JavaScript 编程语言中使用这个 API。

Date存在的问题


  • 不支持除用户本地时间以外的时区

不支持开发人员通过 API 来切换时区信息。

  • 解析器行为不可靠以至于无法使用

new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);

开发人员常常因为输入的参数格式问题,引发时间错误,导致程序崩溃。比如输入 ('2022-02-22') 和 (2022,02,22) 得到的结果却不同,

  • 计算 API 缺失

涉及时间的运算逻辑通常都需要开发人员自己去写,比如比较两个时间的长短,时间之间的加减运算,没有自己的计算API

  • 不支持非公历

除了全球通用的公历外,无法使用各国的自己的历法。比如中国的农历

Temporal的诞生


为了弥补 Date 的缺陷,很多程序员着手开发一些开源的库来绕过对 Date 的直接使用,比较优秀的npm库如 date.js 、moment.js,但 Date 的问题始终困扰着 Javascript 这门语言的进一步发展,于是 TC39 组织开始了对 Date 的升级改造,他们找到了 moment.js 库的作者,Maggie ,由她来担任新特性 Temporal的主力设计。

感兴趣的同学可以去博客[1]阅读更多细节,该网页的控制台已经支持Temporal 对象或者在本地运行,安装Temporal的 polyfill

$ npm install @js-temporal/polyfill
import { Temporal} from '@js-temporal/polyfill';

Temporal是一个全局对象,像 Math 、Promise 一样位于顶级命名空间中,为 Javascript 语言带来了现代化的日期、时间接口。

如图所示,一个全面的Temporal包含三个部分:

绿色区域为 ISO 8601 格式的 日期和时间;

黄色区域为时区(日本东京);

红色区域为日历(日本历法);

ISO 8601格式:国际通用时间格式,T用来分割日期(2020-08-05)和时间(20:06:13),“+”或者“-”分别代表东时区和西时区。+09:00,代表东九区。

对比 Date

new Date()
//Fri Jan 28 2022 17:03:11 GMT+0800 (中国标准时间)

Date 采用 GMT格式(旧的时间表示格式) 的时间,使用方面不如 ISO 8601 通用,同时不包含 时区和历法。

Temporal各种类型介绍


推翻重新设计的Temporal,包含5种主要 类型,每个类型负责不同的功能,类型之间还可以相互进行转换。

学会了这5种类型的 功能 以及类型的之间的 关系 ,就基本掌握了Temporal。

下面是Temporal各种类型的功能与转换关系图,非常重要,十分有利于我们全面理解和使用Temporal,下文将逐步讲解。

ZonedDateTime

定义:最全面的Temporal类型,与时区和日历都有关联。表示从地球上特定区域的角度来看,在特定时刻发生的事。

使用场景:在北京时间的 2008年5月12日14时28分4秒发生汶川大地震,或者 在 纽约时间的 2008年5月12日01时28分4秒发生了汶川大地震。

如何获得一个 ZonedDateTime 类型?


不仅是获得一个 ZonedDateTime 类型,其实所有的 T

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,你在使用webpack的时候遇到了一个错误,错误信息是"Error: webpack.optimize.UglifyJsPlugin has been removed, please use config.optimization.minimize instead." 这是因为在最新的webpack版本中,webpack.optimize.UglifyJsPlugin已经被移除了,取而代之的是config.optimization.minimize。你需要在配置文件中引入uglifyjs-webpack-plugin,并将其添加到optimization.minimizer中,如引用\[2\]所示。这样就可以解决这个错误了。 至于你的问题是关于new webpack.optimize.UglifyJsPlugin的使用,根据最新的webpack版本,你应该使用config.optimization.minimize来进行代码压缩和优化,而不是使用UglifyJsPlugin。你可以按照引用\[2\]中的配置示例来修改你的webpack配置文件,将UglifyJsPlugin替换为config.optimization.minimizer。这样就可以正确地进行项目打包了。 #### 引用[.reference_title] - *1* *2* [webpack.optimize.UglifyJsPlugin has been removed, please use config.optimization.minimize instead](https://blog.csdn.net/weixin_37861326/article/details/107067217)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [webpack.optimize.CommonsChunkPlugin has been removed,please use config.optimization.splitChunks...](https://blog.csdn.net/beijikaiqiting/article/details/130506403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值