日期/时间组件包含时间和日期信息的所有输入、输出和存储。它的代码可以追溯到早期版本的PHP 4实现,并且经过了部分PHP 5改进。
在一年多的WP版本迭代中,我们运行了一个名为“ wp_date”的项目来修复和改进该组件,这些改进将集成到 WordPress 5.3。
- 所有现有代码将具有更正确和可靠的操作。我们修复了错误,添加了单元测试,并更正了许多函数的内联文档。
- WP 5.3+代码将可以访问新的API函数,以方便使用和实现PHP互操作性。
新的API函数
通过将核心版本所需的PHP版本提高到5.6,我们改进了组件的API。
统一时区检索
wp_timezone_string()
无论(timezone_string
/gmt_offset
选项) 设置如何,都可以通过一种单一的方式检索站点时区。可能返回Region/Location
字符串或±NN:NN
偏移量。现在,两者都是内核支持的PHP版本的有效输入。wp_timezone()
检索站点时区作为DateTimeZone
对象。
PHP互操作性
current_datetime()
检索当前时间作为DateTimeImmutable
对象。get_post_datetime()
检索文章时间作为DateTimeImmutable
对象。get_post_timestamp()
检索文章时间作为Unix时间戳。
逐步淘汰WP时间戳
日期/时间组件依赖于所谓的“ WordPress时间戳”,即带有时区偏移量的Unix时间戳的总和。这导致许多错误,并且与上游PHP或任何外部系统缺乏互操作性。内联文档错误地将它们称为Unix时间戳。
没有向后兼容性完成,就不可能删除WP时间戳。但是我们在以下方面取得了重大进展:
- 减少其在核心的使用;
- 更正无效的内联文档;
- 提供使用真实Unix时间戳的新API。
不再推荐
- 不要将时间作为WP时间戳获取:
current_time( 'timestamp' )
get_post_time( 'U' )
- 不要根据WP时间戳本地化时间:
date_i18n( DATE_RFC3339, $timestamp + $offset )
- 不要持久性地存储WP时间戳;
- 不要比较WP时间戳。
推荐的方式
- 检索时间作为Unix时间戳或
DateTimeImmutable
对象:time()
current_datetime()
get_post_datetime()
get_post_timestamp()
- 根据Unix时间戳本地化时间:
wp_date( DATE_RFC3339, $timestamp )
- 存储时间精确的Unix时间戳或格式,例如
DATE_RFC3339
; - 比较
DateTimeInterface
同一时区中的Unix时间戳,对象或字符串可比较的日期。
小结
日期/时间核心组件已收到急需的修复程序和一系列改进。带有时间和日期的WordPress平台上的代码将更加方便和可靠。
如果你对以上改进或组件有疑问,请关注WordPress Slack中的#core-datetime频道。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。