Я работаю над проектом, который поддерживает несколько стран, пока это европейские округа.PHP DateTime Manager по языку
Я держу дату в дате с часовым поясом UTC для всех стран. Когда я выбираю, я хочу показать соответствующее время для каждой страны. Например, если сохраненное время datetime [2016-12-20 07:00:00] UTC
Так что для Германии должно быть 2016-12-20 08:00:00 и для Великобритании должно быть 2016-12-20 07 : 00: 00
Таким образом, вместо проверки, в какой стране он
if($country === 'DE'){
return (new DateTime($time))->setTimeZone(new DateTimeZone('Europe/Berlin'));
}else if ($country === 'UK'){
return (new DateTime($time))->setTimeZone(new DateTimeZone('Europe/London'));
}
т.д.
Я думаю о создании диспетчера DateTime для управления установкой TimeZone.
я придумал следующее попробовать
<?php
namespace App\Library\Values;
use App\Library\System\Locale;
final class DateTimeImmutableTimeZone extends \DateTimeImmutable
{
/**
* @var array
*/
private $timezones = [
'GB' => 'Europe/London',
'DE' => 'Europe/Berlin',
'FR' => 'Europe/Paris',
'ES' => 'Europe/Madrid',
'IT' => 'Europe/Rome',
'SE' => 'Europe/Stockholm',
'NL' => 'Europe/Amsterdam',
'BE' => 'Europe/Brussels',
'DK' => 'Europe/Copenhagen',
];
/**
* @param Locale $locale
*/
public function __construct(Locale $locale)
{
$this->setTimezone(
new \DateTimeZone($this->timezones[(string)$locale->country()])
);
}
}
Но когда я пытаюсь: var_dump (новый DateTime()); // Вывод:
DateTimeImmutable {#1673
+"date": "2016-12-20 07:00:00"
+"timezone_type": 3
+"timezone": "UTC"
}
var_dump (новый DateTimeImmutableTimeZone (новый Locale())); // Вывод:
DateTimeImmutable {#1673
+"date": "2016-12-20 07:00:00"
+"timezone_type": 3
+"timezone": "UTC"
}
Я не уверен, что это неправильно? Кроме того, я не уверен, что этот подход для записи имеет такой менеджер времени TimeZone
Насколько я могу видеть из документов, в классе 'Local' нет функции' country() '. Является ли это (http://php.net/manual/de/class.locale.php) Local, которое вы используете, или это то, что вы написали самостоятельно? – cb0
@ cb0 это псевдокод, представьте себе эту страну return DE – Dahab