2013-10-01 6 views
-1

Я работаю с отметками времени, чтобы выяснить, если два человека онлайн за тот же период времени, вот мой UTC метки времени только для справки:PHP Отметка только час

date_default_timezone_set('UTC'); 
$utc12am = 1380585600; 
$utc1am = 1380589200; 
$utc2am = 1380592800; 
$utc3am = 1380596400; 
$utc4am = 1380600000; 
$utc5am = 1380603600; 
$utc6am = 1380607200; 
$utc7am = 1380610800; 
$utc8am = 1380614400; 
$utc9am = 1380618000; 
$utc10am = 1380621600; 
$utc11am = 1380625200; 
$utc12pm = 1380628800; 
$utc1pm = 1380632400; 
$utc2pm = 1380636000; 
$utc3pm = 1380639600; 
$utc4pm = 1380643200; 
$utc5pm = 1380646800; 
$utc6pm = 1380650400; 
$utc7pm = 1380654000; 
$utc8pm = 1380657600; 
$utc9pm = 1380661200; 
$utc10pm = 1380664800; 
$utc11pm = 1380668400; 

Проблема Я бегу в это, если кто-то говорит, что они находятся в режиме онлайн между 10:00 и 12:00, это говорит о том, что между 1380668400 и 1380585600 он идет в обратном направлении, что отбрасывает весь фрагмент кода. Как мне написать временную метку, которая определяет час, а не день, или как я буду работать вокруг этого? Мой мозг горит.

Update

После долгих головной боли ответ проще, чем это должно было быть, все даты статическими, так захватывая их динамически не то, что я планирую делать, я только с помощью функции даты, так что я не нужно записывать новые значения UTC для каждого отдельного часового пояса. Во всяком случае, я нарисовал картину, и это действительно помогло мне, вам нужно только проверить, находится ли $ max в пределах $ mina - $ maxa ИЛИ, если $ min находится в пределах $ mina - $ maxa. Я не могу поверить, что это заняло у меня такое долгое время

$blend = 'False'; 
    if((($maxa > $min) And ($maxa < $max)) Or (($mina > $min) And ($mina < $max))) { 
     $blend = 'True'; 
    } 
    if($min > $max) { 
     if(($mina > $min) Or ($mina < $max)) { 
      $blend = 'True'; 
     } 
     if(($maxa > $min) Or ($maxa < $max)) { 
      $blend = 'True'; 
     } 
    } 
    if($min === $max) $blend = 'True'; 
+1

почему это важно?Если у вас есть онлайн-время для пользователей в UTC, просто проверьте, находятся ли они в часе друг друга: 'if (abs ($ user1 - $ user2) <= 3600) {тот же период времени}' ./ –

ответ

1

Просто сохраните час (значения от 0 до 23). Например, 15.

+0

Это дает от 12 утра до 10 вечера, а не от 10 вечера до 12 часов – user2827317

+0

Спасибо за обновление в вашем ответе – user2827317

0

Временная метка хранит количество секунд, прошедших после эпохи Unix (1 января 1970 года 00:00:00 по Гринвичу).

Это означает, что вы можете получить от него все, что хотите (дни, месяц, час и т. Д.), Если вы просто считаете секунды с этой эпохи. К сожалению, Php делает это легко для нас.

Это текущий «Час» в формате 24 часа с отметки времени.

$hour = date("G", 1380621600);

Это означает, что все временные метки от 1380621600 до 1380621600 + 3599 возвратит 10 (утра), и это должно быть то, что вы ищете.

Если вы хотите узнать, если кто-то был на сайте между 10 и 12 утра, то вы просто проверить, если date("G",<timestamp>) находится между 10 и 12.

Если вы хотите проверить, если кто-то был на сайте 1-го октября 2013 года между 10 и 12, то вы можете использовать предыдущий метод в дополнение с некоторыми дополнительными аргументами, чтобы получить именно то, что вы хотите:

$year = date("Y", <timestamp>); 
$month = date("F", <timestamp>); 
$date = date("j", <timestamp>); 

вы также можете сделать это в один шаг, используя взорваться, если вы чувствуете приключений.

$logged_in = date("Y F j G", <timestamp>)

Если вы хотите увидеть, если два пользователя на сайте в течение того же времени, то вы можете просто сортировать всякие «онлайн часы» и запустить один линейный просканировать список (с помощью часов, что мы можем теперь цифра out) для определения совпадений.


Ссылки:

PHP - Date
PHP - Explode

+0

Привет, хотя это правильно, это не то, что я ищу. В вашем примере все, что меняется, когда кто-то ищет с 9 вечера до 2 утра, теперь составляет 21 - 2, что все еще отрицательно – user2827317

+0

Я никогда не говорил вам вычитать часы. Но его тривиально только вычесть, если первый час меньше, чем второй час, в противном случае добавить 24 ко второму часу, а затем вычесть. Также я не знаю, почему вы вообще что-то вычитаете. Вы сказали, что хотите узнать, находятся ли люди в режиме онлайн в течение одних и тех же часов, выясняя, как долго они в сети я объяснил выше. – Sanchit

+0

Кажется, что ваш вопрос требует чего-то еще, кроме того, что вы ищете. Многие люди помогли вам разобраться, как получить час с отметки времени в соответствии с вашим заголовком, и я сказал вам, что вам нужно провести линейное сканирование через время, которое каждый установил в качестве своего онлайн-времени, чтобы выяснить, находятся ли они в сети во время такой же период времени. Вы по какой-то причине вычитаете часы в ответах каждого (неправильно между прочим), а затем сообщая им, что вы хотите что-то еще. Выдумай и напиши правильные вопросы. Я не могу читать мысли. – Sanchit

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