Хорошо, поэтому я не уверен, правильно ли я конвертирую время ввода пользователя в GMT. У меня будут пользователи из нескольких часовых поясов, которые будут вводить «события», и они должны будут видеть, «сколько времени осталось» или «сколько времени осталось» текущего time();
Вот как я планировал преобразовать время, которое они вводят. Это начнется как что-то вроде 07/21/2011 01:30 am
Затем
echo gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am'));
дает мне 2011-07-21 08:30:00
Итак, я планировал взять значение gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am'));
, затем взять time()
и отобразить «сколько времени до этого события» пользователям. Но кажется, что к результату всегда добавляется 10 часов, поэтому, если бы я планировал событие через 30 минут, это означало бы 10 часов 30 минут. Итак, я думаю, что я не конвертирую местное время правильно или что-то в этом роде.
Что мне не хватает? Может быть, я просто не правильно понимаю GMT. Как я могу убедиться, что все время указано по Гринвичу, чтобы все время было универсальным для всех пользователей на сайте?
Другая информация, если это поможет:
Часовой пояс сервера America/Los_Angeles
EDIT:
После каждого предложения я попытался установить это в верхней части моего php-кода:
date_default_timezone_set("GMT");
и я попытался использовать date('Y-m-d H:i:s')
для сравнения, чтобы вычислить разницу, но вместо этого было сказано «3 часа назад», а не 10 часов. Так что это определенно изменило вещи.
Но все еще не правильно.
Я подтвердил, date('Y-m-d H:i:s')
возвращает правильное и текущее время по Гринвичу. Так что это хорошо.
Но дата ввода пользователя выключена. Как я неправильно конвертирую?
ВНОВЬ РЕДАКТИРОВАТЬ (включая некоторые результаты испытаний после предложений Салмана А):
2: 55 утра - мое текущее местное время EST
date('Y-m-d H:i:s')
отображается как 2011-07-21 06:56:43
- это правильно
3: 00 EST - это время в будущем, которое я отправил как 07/21/2011 03:00 am
Вот как я получаю время, "преобразовав его" и отправляя в мою БД:
$time = $_POST['time'];
//there is where im assuming it turns my EST time to the GMT equivalent.
$the_date = strtotime($time . ' GMT');
$utctime = gmdate('Y-m-d H:i:s',$the_date);
Я ожидаю, что моя функция сообщит мне, что событие через 5 минут, но его часы не работают.
просто для того, чтобы убедиться, что введенное пользователем время действительно было преобразовано в GMT. Я отображаю $utctime
, и оно отображается как 2011-07-21 03:00:00
- это не 08:00 или 07:00 (что, я думаю, одним из них будет По Гринвичу)
Так как мне его конвертировать?
Итак, я вижу, что strtotime($time . ' GMT');
не применяет GMT к местному времени, которое я предоставляю. На примечании стороны: somone предложил, чтобы у меня был date_default_timezone_set("GMT");
в моем коде, таким образом, у меня это наверху. Должен ли я удалить это? но я заметил, что если я удалю его, GMT будет неправильным. Так вот почему я оставил это.