2012-02-08 2 views
2

Я пытаюсь выяснить, существует ли дата между двумя временными отметками unix независимо от года. Например, допустим, что у меня есть дата 12 декабря, но не содержит год. Как я могу проверить, существует ли 12 декабря между отметками времени 1353369600 и 1358640000 (первая отметка времени равна 20 ноября 2012 года, вторая - 20 января 2013 года). Я программирую приложение на PHP, однако, если вы знаете, как это сделать на другом языке, напишите ваши мысли, чтобы я мог попытаться работать по логике.Проверьте, существует ли день между отметками времени

Заранее спасибо

Update: вот ответ! Используйте strtotime и установите второй параметр в начало timestamp :)

ответ

3

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

$ts = strtotime("December 12th"); 
if ($ts >= 1353369600 && $ts <= 1358640000) {//....} 
+0

год должен быть независимо от года между отметкой времени A и B метки времени, а так как тайминг может упасть между изменением года, я не совсем уверен, как получить временную метку, которая будет находиться между этими датами. – user1110302

+1

Правильно, как сказал xdazz. Вы конвертируете дату, которую вы тестируете, в временную метку unix. Поэтому, будь то жесткая кодировка даты в 'strtotime', или если вы собираете данные формы, это не имеет большого значения. Вы передаете столько информации о дате, что у вас есть. – MetalFrog

+1

Если текущий год 2012 года, как в моем примере, ваш код будет работать. Однако, если использовать 2013 и 2014 годы, отметка времени будет использовать неправильный год (2012 вместо 2013/2014). – user1110302

0

Вы можете проверять каждый год между отметками времени и видеть, есть ли между ними желаемый день.

function inBetween($day, $month, $from, $to) 
{ 
    $from_year = date('Y', $from); 
    $to_year = date('Y', $to); 

    if($from_year == $to_year) 
    { 
     $time = mktime(12,0,0,$month,$day, $from_year); 

     return $time > $from && $time < $to; 
    } 
    elseif($from_year < $to_year) 
    { 
     for($i=$from_year;$i<=$to_year;$i++) 
     { 
      $time = mktime(12,0,0,$month,$day, $i); 
      if($time > $from && $time < $to) return TRUE; 
     } 
     return FALSE; 
    } 
} 

var_dump(inBetween(12, 12, 1353369600, 1358640000)); 
Смежные вопросы