公告:123目录网为广大站长提供免费收录网站服务,我们将免费进行到底,如需快审服务(10元/站)请联系站长QQ,可自助充值发布。

点击这里在线咨询客服
新站提交
  • 网站:315
  • 待审:0
  • 小程序:12
  • 文章:35791
  • 会员:69

使用 Date 和 Time 是 WordPress 第三方开发者非常日常的工作,我们知道 PHP 提供了非常多的时间相关的函数和类,但是 WordPress 对时间的处理,有自己一套的逻辑。

很多人刚开始在 WordPress 处理时间相关的功能或者问题的时候,经常碰到一些意外的情况,这是因为对 WordPress 的一些设置和处理逻辑不熟悉造成的。下面讲解下在 WordPress 中使用 Date 和 Time 的经验和坑:

UTC 时区

在 PHP 中,我们可以使用 date 函数格式化一个时间戳,比如:

echo date('Y-m-d H:i:s', 1669043745);	// 2022-11-21 23:15:45

如果我们在 WordPress 也这么使用,将会输出:2022-11-21 15:15:45,将会相差8小时,这是为什么呢?

因为 WordPress 为了防止因为系统不同设置造成的问题,先把默认的时区设置为 UTC,也就是格林威治标准时间,和北京时间正好差8个小时。这个是在 wp-settings.php 大概 68行的位置:

// WordPress calculates offsets from UTC.
// phpcs:ignore WordPress.DateTime.RestrictedFunctions.timezone_change_date_default_timezone_set
date_default_timezone_set( 'UTC' );

wp_date

那么在 WordPress 要正确基于时间戳显示当地的时间怎么办呢?使用 wp_date 函数:

echo wp_date('Y-m-d H:i:s', 1669043745);	// 2022-11-21 23:15:45

这个函数将会自动获取在 WordPress 后台设置的时区(如下图所示),然后按照该时区格式化时间戳。

告别相差8小时问题,在 WordPress 正确使用 Date 和 Time插图

所以在 WordPress 进行格式化时间戳操作的时候,只需要记住这条规则:date 函数替换成 wp_date 函数即可

除了能够正确获取本地时区之外,wp_date 函数还能进行一些本地化工作。

告别相差8小时问题,在 WordPress 正确使用 Date 和 Time插图1

比如要使用如上图所示后台设置的日期和时间格式显示当前的时间:

$date_format	= get_option('date_format');
$time_format	= get_option('time_format');

echo wp_date("{$date_format} {$time_format}");	// 2022年11月21日 下午23:15

wp_timezone

wp_date 函数之所以能够正确显示时间,是因为 WordPress 提供了两个时区的函数,他们能够正确返回后台设置的时区:

  • wp_timezone_string() 用于获取当前站点的时区,后台无论是通过 timezone_string(比如: Asia/Shanghai )还是 gmt_offset(比如:UTC+8)方式设置都可以。
  • wp_timezone() 也是获取当前站点的时区,但是返回的是 DateTimeZone 对象。

wpjam_strtotime

前面解决了在 WordPress 中基于时间戳正确显示时间的问题,然后还有一个常见的操作就是将日期转换为日期戳,PHP 提供了一个 strtotime 的函数:

echo strtotime("2022-11-21 23:15:45");	// 1669072545

和上面输入的 1669043745 也是相差 8x3600,也是8小时,同样的原因,这个函数也是基于系统默认的时区的,前面可知,WordPress 设置默认的时区是 UTC 时区。

所以为了方便将当地时间正确转换成时间戳,所以我写了一个函数 wpjam_strtotime

function wpjam_strtotime($string){
	return date_create($string, wp_timezone())->getTimestamp();
}

利用前面介绍的 WordPress 提供的函数 wp_timezone(),这个获取时间戳:

echo wpjam_strtotime("2022-11-21 23:15:45");	// 1669043745

wpjam_strtotime 很快会在 WPJAM Basic 新版本中发布,所以有了第二条规则:在 WordPress 进行日期和时间转换成时间戳操作的时候,strtotime 函数替换成 wpjam_strtotime 函数即可

总结

一句话总结,我们在 WordPress 中可以使用 Date 和 Time 做很多事情,但是一定使用 WordPress 方式,WordPress 方式,我也总结为两条规则:

  1. 进行格式化时间戳操作的时候:date 函数替换成 wp_date 函数
  2. 将日期和时间转换成时间戳的时候:strtotime 函数替换成 wpjam_strtotime 函数

标签:wordpress教学

下一篇:【wordpress教学】WordPress 文章超过10万就会负载很高,是不是不适合做大网站?

上一篇:【wordpress教学】推荐一款照片博客的 WordPress 主题:Rainfall

相关文章

  575

注册时间:

网站:1 个   小程序:3 个  文章:12 篇

  • 315

    网站

  • 12

    小程序

  • 35791

    文章

  • 69

    会员

赶快注册账号,推广您的网站吧!
最新入驻小程序

数独大挑战2018-06-03

数独一种数学游戏,玩家需要根据9

答题星2018-06-03

您可以通过答题星轻松地创建试卷

全阶人生考试2018-06-03

各种考试题,题库,初中,高中,大学四六

运动步数有氧达人2018-06-03

记录运动步数,积累氧气值。还可偷

每日养生app2018-06-03

每日养生,天天健康

体育训练成绩评定2018-06-03

通用课目体育训练成绩评定