我想将日期格式从d/m/Y转换为带有时区偏移的Y-m-d格式。 使用以下代码,我可以将日期从d/m/Y转换为Y-m-d:
$date = DateTime::createFromFormat('d/m/Y', $date);
$date = $date->format('Y-m-d');
但是我不确定如何添加时区偏移量。
我想将日期格式从d/m/Y转换为带有时区偏移的Y-m-d格式。 使用以下代码,我可以将日期从d/m/Y转换为Y-m-d:
$date = DateTime::createFromFormat('d/m/Y', $date);
$date = $date->format('Y-m-d');
但是我不确定如何添加时区偏移量。
(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'));
只需使用DateTime::setTimeZone()
即可:
$date = DateTime::createFromFormat('d/m/Y', $date);
$date->setTimeZone(new DateTimeZone('America/New_York'));
$date = $date->format('Y-m-d');
+2:00
而不是 America/New_York
?我知道应该使用时区而不是偏移量,因为夏令时等原因,但在这种环境中,像 America/New_York
这样的时区无法工作。 - yoshiAmerica/New_York
是用户的时区? - yoshi$date
,然后当调用setTimeZone()
时,将其转换为“美国/纽约”的时区。换句话说,它引入了一个时间因素 - $date
不再是午夜。对于某些人来说可能不是很重要,但对我来说很重要! - rinogo$format = 'Y-m-d H:i:s';
$datetime_str = '2022-10-28 17:24:00';
$timezone_str = 'Europe/Rome';
$dt_test_denoise = DateTime::createFromFormat($format, $datetime_str,
new DateTimeZone($timezone_str));
echo '$dt_test_denoise:';
echo "<br/>";
var_dump($dt_test_denoise);
echo "<br/>";
echo "<br/>";
$dt_test_JohnConde = DateTime::createFromFormat($format, $datetime_str);
$dt_test_JohnConde->setTimeZone(new DateTimeZone($timezone_str));
echo '$dt_test_JohnConde:';
echo "<br/>";
var_dump($dt_test_JohnConde);
echo "<br/>";
echo "<br/>";
在 http://phptester.net/ 上执行此操作,您将看到差异。
我认为最好的解决方案是去噪!