2011-09-16 4 views
2

Я ищу функцию для преобразования дат, представленных в «X Часах назад» и «X минут назад», обратно в метку времени в php, у кого есть душа для этого?Преобразование x часов x минут назад назад в unix timestamp

+1

Почему этот вопрос отмечен MySQL? –

+0

Потому что я хочу вставить его в MySQL после его преобразования, извините за то, что не упоминал об этом. – inviz

+0

Я не вижу, как это важно. Вы можете распечатать его и наклеить на голову суперклей, если хотите, но это не имеет никакого отношения к вопросу. –

ответ

10

strtotime уже делает это:

$timestamp = strtotime("8 hours ago"); 

См. relative time format specifications для получения дополнительной информации.

+0

Спасибо большое! Я все это пробовал, но что-то пошло не так. Работала отлично. – inviz

1
$hourago= "-1 hour"; 
$minago = "-2 minute"; 

$timestamp = strtotime($hourago.' '.$minago); 
echo $timestamp; 

или

$hourago= "-1"; 
$minago = "-2"; 

$timestamp = strtotime($hourago.' hour '.$minago.' minute'); 
echo $timestamp; 
2

я помог кому-то на StackOverflow, чтобы написать функцию, которая делает реверс этого, здесь есть код, я уверен, что если вы расформирования и повернуть его вспять, вы будете иметь ваш ответ:

<? 
$unix_time = 6734; 
echo howLongAgo($unix_time); 

function howLongAgo($time_difference){ 

// Swtich logic based on the time difference passed to this function, sets the english string and what number the difference needs to be divided by 
    switch($time_difference){ 
     case ($time_difference < 60): 
       $string = " second"; 
       break; 
     case ($time_difference >= 60 && $time_difference < 3600): 
       $string = " minute"; 
       $divider = 60; 
       break; 
     case ($time_difference >= 3600 && $time_difference < 86400): 
       $string = " hour"; 
       $divider = 3600; 
       break; 
     case ($time_difference >= 86400 && $time_difference < 2629743): 
       $string = " day"; 
       $divider = 86400; 
       break; 
     case ($time_difference >= 2629743 && $time_difference < 31556926): 
       $string = " month"; 
       $divider = 2629743; 
       break; 
     case ($time_difference >= 31556926): 
       $string = " year"; 
       $divider = 31556926; 
       break; 
    } 

// If a divider value is set during the switch, use it to get the actual difference 
if($divider){$diff = round($time_difference/$divider);}else{$diff = round($time_difference);} 
// If the difference does not equal 1, pluralize the final result EG: hours, minutes, seconds 
if($diff != 1){$pluralize="s";} 
// Concatenate all variables together and return them 
$final = $diff . $string . $pluralize . " ago"; 
return $final; 

} 
?> 
+4

Боже мой ... –

+1

Вид overkill. Кроме того, у этого есть тонкая ошибка в том, что он не будет правильно учитывать DST (интервалы жестко запрограммированы). – Jon

+1

И не отвечает на вопрос. Две задачи на самом деле совсем разные. – Artefacto

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