如何使用DateTime类在PHP中的时区之间进行转换?
我正在尝试将当前时间转换为UTC,并将UTC转换为当前时区 以下是我所做的:如何使用DateTime类在PHP中的时区之间进行转换?,php,datetime,timezone,Php,Datetime,Timezone,我正在尝试将当前时间转换为UTC,并将UTC转换为当前时区 以下是我所做的: $schedule_date = new DateTime($triggerOn, new DateTimeZone('UTC') ); $triggerOn = $schedule_date->format('Y-m-d H:i:s'); echo $triggerOn; 输出值不会改变格式中唯一改变的内容 字符串$triggerOn是根据America/Los_Angeles时区生成的 这是我的字符串在
$schedule_date = new DateTime($triggerOn, new DateTimeZone('UTC') );
$triggerOn = $schedule_date->format('Y-m-d H:i:s');
echo $triggerOn;
输出值不会改变格式中唯一改变的内容
字符串$triggerOn
是根据America/Los_Angeles
时区生成的
这是我的字符串在前后的样子:
BEFORE 04/01/2013 03:08 PM
AFTER 2013-04-01 15:08:00
因此这里的问题是DateTime不能转换为UTC。使用本地时区创建日期,然后调用
DateTime::setTimeZone()
对其进行更改。您要查找的是:
$triggerOn = '04/01/2013 03:08 PM';
$user_tz = 'America/Los_Angeles';
echo $triggerOn; // echoes 04/01/2013 03:08 PM
$schedule_date = new DateTime($triggerOn, new DateTimeZone($user_tz) );
$schedule_date->setTimeZone(new DateTimeZone('UTC'));
$triggerOn = $schedule_date->format('Y-m-d H:i:s');
echo $triggerOn; // echoes 2013-04-01 22:08:00
您正在使用日期/时间并正确设置时区,但是在格式化日期时间之前,您没有设置所需的输出时区。下面是一个接受UTC时区并将日期/时间转换为美国/洛杉矶时区的示例:
<?php
$original_datetime = '04/01/2013 03:08 PM';
$original_timezone = new DateTimeZone('UTC');
// Instantiate the DateTime object, setting it's date, time and time zone.
$datetime = new DateTime($original_datetime, $original_timezone);
// Set the DateTime object's time zone to convert the time appropriately.
$target_timezone = new DateTimeZone('America/Los_Angeles');
$datetime->setTimeZone($target_timezone);
// Outputs a date/time string based on the time zone you've set on the object.
$triggerOn = $datetime->format('Y-m-d H:i:s');
// Print the date/time string.
print $triggerOn; // 2013-04-01 08:08:00
将$triggerOn
传递给new DateTime()
之前,它包含什么?DateTime()构造函数希望第一个参数是时间。可能您的$triggerOn不是正确的时间值。$triggerOn值id 04/01/2013 03:08 PM您希望字符串“04/01/2013 03:08 PM”
如何准确地包含信息“America/Los_Angeles”?@fab我的字符串应该是什么样子才能工作?我如何使用usersetTimezone来更改它:$triggerOn是由本地时间创建的,我想将其转换为UTC。考虑到标记为正确的答案,不确定为什么向下投票会这样做。我承认,它缺乏细节,那么这是一个非常简单的问题。仅供读者参考:setTimeZone
更改对象的时区字符串以及日期时间值。格式就是用来获取字符串的格式。这不像setTimeZone
只更改时区属性,adn然后格式仅将其吐出-在洛杉矶执行setTimeZone
@ahnbizcad 04/01/2013 03:08 PM时,实际数值时间值受到影响,与UTC中2013-04-01 22:08:00的时间完全相同。时间本身并没有改变,只是时区而已。我说的是相对于东部时间12点改为太平洋时间12点。用这个函数设置时区并不能做到这一点。我澄清了一个潜在的范式混乱。@ahnbizcad您之前的评论非常混乱,我甚至认为这是错误的。在PHP中,日期/时间信息内部存储在UTC中,因此在更改时区时,日期/时间值不会更改,只有UTC偏移量会更改。我认为答案中的代码注释很明显,当更改DateTime对象的时区时,这会更改本地时间。如果时区部分称为“时区”,那么如果不是“时间”,您会如何称呼另一部分?问题是“时间”这个词模棱两可。它可以引用实际的基本概念时间点,也可以是与时区字符串相对应的精确数字。我已经想到了两个子串,而时间对你们来说意味着概念时间,因为我们有不同的范式。如果我说的是两个子串,那么单词click表示这一个子串。演讲者/作者决定语境/范式。再给我一个词,我就用它。