如何使用 Laravel 将任何时区转换为 UTC
How to convert any time zone into UTC using Laravel
我想转换用户的时间,例如。 08:45 P.M
, 到 UTC 时区。我该怎么做?
if ($request->open_at)
{
$time = Carbon::parse($request->open_at)->toUTCString();
dd($time);
$query->whereTime('open_at', '>=', $time);
}
使用这种PHP方法:
$time = new DateTime("08:45 P.M");
$time ->setTimezone(new DateTimeZone("UTC"));
echo $time ->format("Y-m-d H:i:s e");
像这样,但除非您总是从系统时区开始(在 PHP 中配置),否则 date 必须已经设置了正确的时区才能正常工作,就像其他人提到的那样。
$time = Carbon::parse($request->open_at);
$time->setTimezone('UTC');
...
Carbon 扩展了 DateTime 对象,包括 setTimezone
Carbon 有 ->utc()
方法(等同于 setTimezone('UTC')
)并且 Laravel 查询构建可以获取 Carbon 对象而无需将其格式化为字符串:
$query->whereTime('open_at', '>=', Carbon::parse($request->open_at)->utc());
使用设置时区功能转换时间
$time = Carbon::parse($request->open_at);
$time->setTimezone('UTC');
用户的时区可以输入 parse()
的可选第二个参数。我也一直找不到任何 toUTCString()
方法 ()。总计:
$userTimeZone = 'Europe/Berlin'; // We'll come to this later
$time = Carbon::parse($request->open_at, $userTimeZone)->setTimezone('UTC');
echo $time->format('r');
例如:
foreach (['Asia/Tokyo', 'Europe/Berlin', 'America/Los_Angeles'] as $userTimeZone) {
echo "$userTimeZone\n";
$time = Carbon::parse('08:45 P.M', $userTimeZone);
echo $time->format('r'), "\n";
$time->setTimezone('UTC');
echo $time->format('r'), "\n\n";
}
Asia/Tokyo
Fri, 24 Dec 2021 20:45:00 +0900
Fri, 24 Dec 2021 11:45:00 +0000
Europe/Berlin
Fri, 24 Dec 2021 20:45:00 +0100
Fri, 24 Dec 2021 19:45:00 +0000
America/Los_Angeles
Thu, 23 Dec 2021 20:45:00 -0800
Fri, 24 Dec 2021 04:45:00 +0000
当然,如果您不知道用户所在的时区,那么所有这些都是毫无意义的。
你有这样的信息吗?最简单的方法可能就是问,虽然你也可以使用一些技巧来尝试和猜测,例如:
- 客户端JavaScript
- 地理定位 API
我想转换用户的时间,例如。 08:45 P.M
, 到 UTC 时区。我该怎么做?
if ($request->open_at)
{
$time = Carbon::parse($request->open_at)->toUTCString();
dd($time);
$query->whereTime('open_at', '>=', $time);
}
使用这种PHP方法:
$time = new DateTime("08:45 P.M");
$time ->setTimezone(new DateTimeZone("UTC"));
echo $time ->format("Y-m-d H:i:s e");
像这样,但除非您总是从系统时区开始(在 PHP 中配置),否则 date 必须已经设置了正确的时区才能正常工作,就像其他人提到的那样。
$time = Carbon::parse($request->open_at);
$time->setTimezone('UTC');
...
Carbon 扩展了 DateTime 对象,包括 setTimezone
Carbon 有 ->utc()
方法(等同于 setTimezone('UTC')
)并且 Laravel 查询构建可以获取 Carbon 对象而无需将其格式化为字符串:
$query->whereTime('open_at', '>=', Carbon::parse($request->open_at)->utc());
使用设置时区功能转换时间
$time = Carbon::parse($request->open_at);
$time->setTimezone('UTC');
用户的时区可以输入 parse()
的可选第二个参数。我也一直找不到任何 toUTCString()
方法 ()。总计:
$userTimeZone = 'Europe/Berlin'; // We'll come to this later
$time = Carbon::parse($request->open_at, $userTimeZone)->setTimezone('UTC');
echo $time->format('r');
例如:
foreach (['Asia/Tokyo', 'Europe/Berlin', 'America/Los_Angeles'] as $userTimeZone) {
echo "$userTimeZone\n";
$time = Carbon::parse('08:45 P.M', $userTimeZone);
echo $time->format('r'), "\n";
$time->setTimezone('UTC');
echo $time->format('r'), "\n\n";
}
Asia/Tokyo
Fri, 24 Dec 2021 20:45:00 +0900
Fri, 24 Dec 2021 11:45:00 +0000
Europe/Berlin
Fri, 24 Dec 2021 20:45:00 +0100
Fri, 24 Dec 2021 19:45:00 +0000
America/Los_Angeles
Thu, 23 Dec 2021 20:45:00 -0800
Fri, 24 Dec 2021 04:45:00 +0000
当然,如果您不知道用户所在的时区,那么所有这些都是毫无意义的。 你有这样的信息吗?最简单的方法可能就是问,虽然你也可以使用一些技巧来尝试和猜测,例如:
- 客户端JavaScript
- 地理定位 API