当前位置: 首页 > 知识库问答 >
问题:

php - PHP strtotime函数与时区问题?

邢浩邈
2024-01-09

我在使用PHP strtotime函数是,遇到了+9时区的问题。

$first_day = strtotime($year.'-'.$i.'-01 00:00:00');return json($first_day);

得到的结果是 2024-01-01 09:00:00
请问到底该怎么解决才能使 strtotime 直接得到0点的时间戳?

我检查了系统的时区,timedatectl 返回的结果

               Local time: Wed 2024-01-03 22:15:09 CST           Universal time: Wed 2024-01-03 14:15:09 UTC                 RTC time: Wed 2024-01-03 14:15:09                Time zone: Asia/Shanghai (CST, +0800)System clock synchronized: yes              NTP service: active          RTC in local TZ: no

PHP date_default_timezone_get() 返回的是PRC。

即便使用 DateTime 得到的依然是2024-01-01 09:00:00。

new DateTime($year.'-'.$i.'-01', new DateTimeZone('Asia/Shanghai'));

共有2个答案

暴德运
2024-01-09

strtotime 函数使用默认时区,如果你的date_default_timezone_get获取到是PRC,正常是没问题的。

可以试下这代码:

ini_set('date.timezone', 'PRC');echo date_default_timezone_get(), PHP_EOL;echo strtotime('today'), PHP_EOL;echo date('Y-m-d H:i:s', strtotime('today'));

效果见:https://3v4l.org/ICbJv

郭知
2024-01-09

要解决 PHP strtotime 函数与时区相关的问题,你需要正确设置 PHP 的时区,并将其应用于 strtotime 函数。在你的情况下,系统时区设置正确,但 PHP 的时区设置似乎存在问题。

首先,确保你在 PHP 代码中设置了正确的时区。你可以使用 date_default_timezone_set 函数来设置时区。在你的代码中添加以下行:

date_default_timezone_set('Asia/Shanghai');

这将设置 PHP 的默认时区为上海时区(CST)。

接下来,使用 strtotime 函数时,将日期时间字符串传递给 strtotime 函数,并指定正确的时区。在你的代码中,将日期时间字符串中的时间部分设置为 00:00:00,以确保获取的是当天的凌晨时间戳。然后,使用 DateTime 对象将时间戳转换为日期时间字符串,并指定正确的时区。

以下是修改后的代码示例:

date_default_timezone_set('Asia/Shanghai');$year = 2024;$i = 1;$date = $year.'-'.$i.'-01 00:00:00';$timestamp = strtotime($date);$datetime = new DateTime(null, new DateTimeZone('Asia/Shanghai'));$datetime->setTimestamp($timestamp);$result = $datetime->format('Y-m-d H:i:s');echo json($result); // 输出 2024-01-01 00:00:00

这样,你就可以使用 strtotime 函数直接获取指定日期当天的凌晨时间戳,并将其转换为正确的日期时间字符串。

 类似资料:
  • 本文向大家介绍php构造函数与析构函数,包括了php构造函数与析构函数的使用技巧和注意事项,需要的朋友参考一下 php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象被释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。 php构造函数 1.是对象创建完成后,“第一个”“自动调用”的方法 2.构造方法的定义,方法名是一个固定的, 在php4中:和类名相同的方法

  • 问题内容: 我的服务器时间是格林尼治标准时间(GMT),每当有人在线时,我都会执行以下操作。 所以,我的问题是……每当有人执行某项操作时,它都会将日期/时间存储在用户本地时间中……这给我带来了很多麻烦。 我想要的是将所有内容存储在GMT中,但要让用户在其本地时区查看数据并与之交互。 编辑: 这是我更新用户状态的方法: 这是我将日期戳转换为秒的功能。 最后,我如何比较日期: 问题答案: 这里的技巧是

  • 并非所有成员函数都要用 public 指定为类接口的一部分。有些成员函数保持 private,作为类中 其他函数的工具函数(utility function)。 软件工程视点 6.17 成员函数分为几大类:读取和返回私有数据成员值的函数、设置私有数据成员值的函数、实现类特性的 函数和进行各种类操作的函数(如初始化类对象、指定类对象、将类与内部类型或其他类进行相互转换以及处理奥对象内存)。 访问函数

  • 本文向大家介绍PHP中in_array函数使用的问题与解决办法,包括了PHP中in_array函数使用的问题与解决办法的使用技巧和注意事项,需要的朋友参考一下 先介绍一下需求背景: 发票方式: 0=捐赠(不要问我为什么,历史原因) 1=对中寄送 2=索取 3=电子发票 现在要对用户提交的数据进行检测: 这个时候出现一个问题,如果压根就不存在$_POST[‘invoice_action']这个值,为

  • 尝试与数据库MySQL建立连接时出现此错误 与MySQL的连接是这样完成的:

  • 我将下面的函数放在一个类中 我尝试在这个函数中再次调用它(我在这个函数