Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用DateTime类在PHP中的时区之间进行转换?_Php_Datetime_Timezone - Fatal编程技术网

如何使用DateTime类在PHP中的时区之间进行转换?

如何使用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时区生成的 这是我的字符串在

我正在尝试将当前时间转换为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
时区生成的

这是我的字符串在前后的样子:

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表示这一个子串。演讲者/作者决定语境/范式。再给我一个词,我就用它。