PHP:具有时区的DateTime :: createFromFormat()

yos*_*shi 5 php timezone datetime timezone-offset

我想将日期形式从d/m/Y转换为Ymd,时区偏移.我可以使用以下代码从d/m/Y转换为Ymd:

$date = DateTime::createFromFormat('d/m/Y', $date);
$date = $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

但我不知道如何添加时区偏移量.

den*_*ise 19

(PHP 5> = 5.3.0)您实际输入第三个参数

public static DateTime DateTime :: createFromFormat(string $ format,string $ time [,DateTimeZone $ timezone])

$date = DateTime::createFromFormat('d/m/Y', $date, new DateTimeZone('Europe/Berlin'));
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么没有选择这个答案作为解决方案.这是正确的答案. (6认同)
  • 它对我不起作用。似乎第三个参数(“ DateTimeZone”对象)被简单地忽略了。实现此目的的唯一方法是使用@John Conde发布的经过验证的答案我正在运行PHP 5.6.30 (2认同)

Joh*_*nde 14

只需使用DateTime::setTimeZone():

$date = DateTime::createFromFormat('d/m/Y', $date);
$date->setTimeZone(new DateTimeZone('America/New_York'));
$date = $date->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此示例首先在服务器的时区中创建`$ date`,然后在调用`setTimeZone()`时,*将*转换为"America/New_York".换句话说,它引入了一个时间组件 - "$ date"不再是午夜.对某些人来说可能不是什么大问题,但这对我来说是好事! (8认同)