2013-07-24 4 views
0

Итак, у меня есть сервер в Денвере с пользователем в Новой Зеландии. Я знаю все о пользователе (часовом поясе и т. Д.), И через программу они просят, чтобы что-то произошло заранее - скажем, в 11:30 5 августа 2013 года. У меня есть задание CRON, которое выполняется каждые 15 минут и запрашивает базу данных, если какие-либо запросы ожидаются в течение следующих 15 минут, но как я могу конвертировать их сохраненное время в эквивалент серверов.Серверное время - вождение меня гайки :-)

  1. Я установил часовой пояс по умолчанию для расчетов: date_default_timezone_set('America/Denver')

  2. Я беру время на сервере и превратить его в эпоху: strtotime(date('Y-m-d H:i:s'))

  3. я добавляю 15 минут, чтобы создать диапазон : $forward15 = strtotime('now +15 minutes')

  4. Я получаю выбранную вами дату из базы данных (и их часовой пояс): 2013-08-05 11:30:00

Теперь что? Если я преобразую это в эпоху, это будет только версия серверов этой даты.

ответ

0

NEW SOLUTION ВИДЕТЬ НИЖЕ!

Если вы знаете часовой пояс, вы можете просто «добавить» его к своему времени.

Например: время

сервера: 01/01/01 00:00 время пользователь хочет: 01/01/01 1:00 часовой пояс пользователя: GMT - 5

Просто найдите время (01/01/01 01:00) и добавьте +5 => 01/01/01 06:00

Итак: ваш скрипт должен быть выполнен 01/01/01 06:00

(конвертировать в временную метку, если необходимо)

Добавлено немного PHP, чтобы продемонстрировать

<?php 

$servertime = time(); //timestamp of 01/01/01 00:00 
$usertime = "01/01/01 06:00";//database 
$userUTC = "-5";//database 
strreplace($userUTC, "-", "+"; 
$replacetext = $userUTC . " days"; 
$usertime = strtotime($replacetext, $usertime);//now usertime is in your local timezone 

$crontime = date("d/m/Y H:i");//the time you want the script to be executed 

?> 

Я просто предполагаю, что часовой пояс сохраняется как «-5», например, и не Европа/Амстердам Просто скажи мне, если я ошибаюсь.

редактировать 14:37

Это может быть даже лучшим решением я думаю!

<?php 
$usertime = "01/01/01 06:00"; 
$userUTC = "-5"; 
$userdate = $usertime . " " . $userUTC; 
$usertimestamp = strtotime($userdate);//now you have the timestamp with correct timezone 
$crontime = date("d/m/Y H:i", $usertimestamp);//formatted to the right date 
echo $crontime; 
?> 

Edit: 25-07-2013 14:26

Новое решение в соответствии с базой данных:

<?php 
$usertime = "01/01/01 06:00"; 
$userUTC = "Pacific/Auckland";//get from database 
$userdate = $usertime . " " . $userUTC; 
$usertimestamp = strtotime($userdate);//now you have the timestamp with correct timezone 
$crontime = date("d/m/Y H:i", $usertimestamp);//formatted to the right date 
echo $crontime; 
?> 
+0

Не нужно ли сначала преобразовывать пользователей в будущее в метку времени? например $ futuredate = новый DateTime ('2013-08-05 11:30', новый DateTimeZone ('Pacific/Auckland')); $ newdate = $ futuredate-> format ('Y-m-d H: i: s'); $ timestamp = strtotime ($ newdate); – user2086003

+0

Да: я просто давал идею, как действовать дальше. Вы можете преобразовать его в метку времени и добавить эквивалент 5 часов или использовать функцию gmdate(), где вы можете добавить смещение, как описано в anwser of liyakat. – Matthijs

+0

Вопрос нового пользователя - почему именно 5 часов? Разве разница во времени не была бы + или - 5 часов для летней экономии PLUS дополнительной разницы в местоположении? Извините за то, что вы так неуверены в расчетах времени. – user2086003

0

сервер, в котором GMT часовой пояс здесь очень простой способ получить времени и даты для любого часового пояса. Это делается с помощью функции времени() и gmdate(). Функция gmdate() обычно дает нам время по Гринвичу, но, делая трюк с функцией time(), мы можем получить GMT + N или GMT-N, чтобы мы могли получить время для любой часовой пояс GMT.

Например, вы должны получить время GMT + 5 мы будем делать это как следующий

<?php 
    $offset=5*60*60; //converting 5 hours to seconds. 
    $dateFormat="d-m-Y H:i"; 
    $timeNdate=gmdate($dateFormat, time()+$offset); 
?> 

Теперь, если у вас есть, чтобы получить время, которое GMT-5 теперь мы просто вычесть смещение от time() вместо добавления во времени, как в следующем примере, мы получаем время для GMT-4

<?php 
    $offset=4*60*60; //converting 5 hours to seconds. 
    $dateFormat="d-m-Y H:i"; 
    $timeNdate=gmdate($dateFormat, time()-$offset); 
?> 
Смежные вопросы