2013-02-18 4 views
-1

Мне нужно сравнить дату на сегодняшний день. В основном я ставлю 2/17/13, и он выйдет «вчера». Я пробовал echo date('l jS F', strtotime('2/15/13'));, но он отобразит только эту дату, не сравнив ее с сегодняшним днем.Расчет даты/времени PHP

+0

Возможный дубликат [Расчет относительного времени] (http://stackoverflow.com/questions/11/calculating-relative-time) – jeremyharris

ответ

0
function relativeTime($time) { 

$d[0] = array(1,"second"); 
$d[1] = array(60,"minute"); 
$d[2] = array(3600,"hour"); 
$d[3] = array(86400,"day"); 
$d[4] = array(604800,"week"); 
$d[5] = array(2592000,"month"); 
$d[6] = array(31104000,"year"); 

$w = array(); 

$return = ""; 
$now = time(); 
$diff = ($now-$time); 
$secondsLeft = $diff; 

for($i=6;$i>-1;$i--) 
{ 
    $w[$i] = intval($secondsLeft/$d[$i][0]); 
    $secondsLeft -= ($w[$i]*$d[$i][0]); 
    if($w[$i]!=0) 
    { 
     $return.= abs($w[$i]) . " " . $d[$i][1] . (($w[$i]>1)?'s':'') ." "; 
    } 

} 

$return .= ($diff>0)?"ago":"left"; 
return $return; 
} 
0

Вот пример, чтобы вы начали:

$when = '2/17/13'; 
$now = new DateTime(); 
// I append $now's time to $then, to make sure we compare 
// the two dates using the same time of the day 
// if you want to compare to $then at 00:00:00, leave it out 
$then = new DateTime($when . ' ' . $now->format('H:i:s')); 

$diff = $now->diff($then); 
switch($diff->days) 
{ 
    case 0: 
     echo 'today'; 
    break; 
    case 1: 
     echo $diff->invert ? 'yesterday' : 'tomorrow'; 
    break; 
    default: 
     echo $diff->invert ? $diff->days . ' days ago' : $diff->days . ' days from now'; 
    break; 
} 
0

Drupal поставляется с очень хорошим format_interval($interval, $granularity = 2, $langcode = NULL)function.

<?php 
function format_interval($interval, $granularity = 2, $langcode = NULL) { 
    $units = array(
    '1 year|@count years' => 31536000, 
    '1 month|@count months' => 2592000, 
    '1 week|@count weeks' => 604800, 
    '1 day|@count days' => 86400, 
    '1 hour|@count hours' => 3600, 
    '1 min|@count min' => 60, 
    '1 sec|@count sec' => 1, 
); 
    $output = ''; 
    foreach ($units as $key => $value) { 
    $key = explode('|', $key); 
    if ($interval >= $value) { 
     $output .= ($output ? ' ' : '') . format_plural(floor($interval/$value), $key[0], $key[1], array(), array('langcode' => $langcode)); 
     $interval %= $value; 
     $granularity--; 
    } 

    if ($granularity == 0) { 
     break; 
    } 
    } 
    return $output ? $output : t('0 sec', array(), array('langcode' => $langcode)); 
} 
?> 

Вам не нужно использовать Drupal для его использования. Просто включите функцию выше. Однако вышеупомянутая функция также вызывает format_plural() - которая вызывает t() (обе пользовательские функции Drupal), поэтому вам нужно будет изменить указанную выше функцию или включить все из них.

Ваш случай использования:

<?php 
$today = date(); 
$compare = strtotime('2/15/13'); 
$interval = ($today - $compare); 

print format_interval($interval, 1); 
// Outputs '1 day' 
?> 
0
function checkDate($todaysDate,$expirationDate){ 
$today = strtotime($todays_date); 
$expiration_date = strtotime($exp_date); 

if ($expiration_date > $today) { 
    $valid = "yes"; 
} else { 
    $valid = "no"; 
} 

return $valid 
} 


$expirationDate = "2006-01-16"; 
$todaysDate = date("Y-m-d"); 

$valid=checkDate($todaysDate,$expirationDate) 

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