Can';无法使php DateTime时区转换工作。它没有';当我改变时区时,我不会改变时间

Can';无法使php DateTime时区转换工作。它没有';当我改变时区时,我不会改变时间,php,datetime,timezone,Php,Datetime,Timezone,我在任何地方都见过这种方法,我寻找php时区转换,但我无法让它工作。我想从默认的mysql格式中获取一个时间戳,并将其转换为$timeformat格式的UTC时间 function utcconvert($time){ $timeformat="M j, Y g:i:s a"; $localtime = new DateTime($time, new DateTimeZone('America/New_York')); $utctime = $localtime; $utctime-&g

我在任何地方都见过这种方法,我寻找php时区转换,但我无法让它工作。我想从默认的mysql格式中获取一个时间戳,并将其转换为$timeformat格式的UTC时间

function utcconvert($time){
 $timeformat="M j, Y g:i:s a";
 $localtime = new DateTime($time, new DateTimeZone('America/New_York'));
 $utctime = $localtime;
 $utctime->setTimeZone(new DateTimeZone('UTC'));
 return date($timeformat, $utctime->format("U"));
}
屈服

echo utcconvert("2013-07-05 16:23:29");
同样的时间,转换成这种格式。我有
date\u default\u timezone\u set(“美国/纽约”)设置


如何解决此问题以将服务器时间(纽约)转换为UTC时间?

如果要将字符串作为第二个参数传递给,则应传递int(UNIX时间戳) 尝试:

编辑:

事实上,你可以用

return date($timeformat, $utctime->getTimeStamp());

问题是,你总是返回一个新的日期,因为你提供了一个糟糕的论点。您应该检查php.ini和
display_errors
error_reporting
,这样您就可以看到当php警告您这件事时,

您将字符串作为第二个参数传递给,您应该传递一个int(UNIX时间戳) 尝试:

编辑:

事实上,你可以用

return date($timeformat, $utctime->getTimeStamp());

问题是,你总是返回一个新的日期,因为你提供了一个糟糕的论点。您应该检查php.ini和
显示错误
错误报告
,这样您就可以看到php何时警告您这件事

当您使用
$utctime->format(“U”)
DateTime
对象生成unix时间戳时,您将丢失任何时区信息,它只会返回一个整数(unix stimestamp,但出于某种原因,它是一个字符串)和php将使用当前默认时区对其进行威胁

只需对日期格式字符串使用
format()
方法即可:

return $utctime->format("U");

,其背后的原因是,
DateTime
对象在更改时区时不会更改内部时间戳值。

当您使用
$utctime->format(“U”)
DateTime
对象生成unix时间戳时,您将丢失任何时区信息,它只会返回一个整数(unix stimestamp,但出于某种原因,它是一个字符串)和php将使用当前默认时区对其进行威胁

只需对日期格式字符串使用
format()
方法即可:

return $utctime->format("U");
,其背后的原因是
DateTime
对象在更改时区时不会更改内部时间戳值