2013-03-21 7 views
1

Я впервые использую класс DateTime для преобразования между различными часовыми поясами.Класс DateTime, если не отображать правильные данные

Вот что у меня есть

$USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles'); 
$UTC = new DateTimeZone('UTC'); 
$schedule_date = new DateTime($call['triggerOn'], $USER_TIME_ZONE); 
echo $schedule_date->format('m/d/Y h:i A'); 

$schedule_date = new DateTime($call['triggerOn'], $UTC); 
echo $schedule_date->format('m/d/Y h:i A'); 

Вот как я иду через мой результат и пытается преобразовать их

foreach ($activities AS $call){ 
    $USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles'); 
    $UTC = new DateTimeZone('UTC'); 
    $schedule_date = new DateTime($call['triggerOn'], $UTC); 
    echo $schedule_date->format('m/d/Y h:i A'); 
} 

Ниже приведены значения для $ вызова [ «triggerOn»]

2013-02-27 18:00:37 
2013-02-02 01:11:07 
2013-01-10 17:12:14 
2013-02-27 22:29:42 
2013-02-27 22:28:38 
2013-02-25 21:53:12 
2013-02-14 14:35:48 
2012-12-13 14:03:16 
2013-03-04 19:04:20 
2013-03-01 18:52:48 
2013-03-05 15:46:56 
2013-03-11 15:26:17 
2013-02-07 18:17:30 
2013-03-05 18:04:25 

Оба моих выхода одинаковы! Я не понимаю, почему. Есть ли конфигурация, которую мне нужно сделать на стороне сервера, поскольку у меня есть PHP, работающий в Windows Server 2008 R2. Благодарим вас за помощь и время.

+1

Каково значение '$ call ['triggerOn']'? –

+1

Невозможно [воспроизвести] (http://3v4l.org/8kVVn) вашу ошибку – Baba

+0

Пожалуйста, проверьте сообщение еще раз, когда я добавил значения для $ call ['triggerOn'] – Jaylen

ответ

0

Зная значение $ вызова [ «triggerOn»] помогло бы, но это будет работать:

$USER_TIME_ZONE = 'America/Los_Angeles'; 
$UTC = 'UTC'; 
$schedule_date = new DateTime($call['triggerOn'], $USER_TIME_ZONE); 
echo $schedule_date->format('m/d/Y h:i A'); 

$schedule_date = new DateTime($call['triggerOn'], $UTC); 
echo $schedule_date->format('m/d/Y h:i A'); 

В принципе, вместо того чтобы создавать новые объекты DateTime, чтобы использовать в качестве параметров для других новых объектов DateTime, а что если вместо этого вы просто используете строку часового пояса? Это работает?

+0

Пожалуйста, проверьте сообщение еще раз, когда я добавил значения для $ вызов ['triggerOn'], передающий часовой пояс, поскольку строка не работает, поскольку нам нужно передать объект. – Jaylen

1

Метод DateTime :: format() возвращает время в часовом поясе, в котором были созданы данные. Преобразование не происходит. Таким образом, ваше время вывода будет таким же, как и ваши времена ввода, независимо от того, в каком часовом поясе вы проходите. Вы можете проверить это, добавив «e» в параметр формата. Вы увидите, что в первом случае часовой пояс America/Los_Angeles, а во втором - UTC.

Возможно, вы пытаетесь преобразовать время между часовыми поясами, не так ли? Чтобы сделать это, просто создайте один новый объект DateTime в одном часовом поясе, вызовите метод setTimezone со вторым часовым поясом, а затем отформатируйте результат.

Все это предполагает, что значение $ call ['triggerOn'] не является ни меткой времени, ни значением с указанным часовым поясом. В этом случае второй параметр конструктора DateTime игнорируется.

+0

. Повторите попытку после добавления значений для $ call ['triggerOn']. Да, я пытаюсь сделать некоторое преобразование между часовым поясом, когда я храню поля dattime в моей базе данных в формате UTC, поэтому я пытаюсь преобразовать сохраненное время и время UTC в часовой пояс текущего пользователя. У меня есть цикл foreach, чтобы идти по результатам и преобразовывать его из UTC в текущий часовой пояс пользователя. Также я добавил в свой пост цикл, в котором я делаю преобразование. – Jaylen

Смежные вопросы