Translate timestamp into words using PHP
Posted: May 28th, 2009 | Author: Dax | Filed under: PHP | Tags: date_diff, php timestamp | No Comments »Here’s a nifty class I use for getting the date difference and translating them into words.
class Date {
public static function date_diff($dateTimeBegin,$dateTimeEnd) {
$dateTimeBegin = @strtotime($dateTimeBegin);
if($dateTimeBegin === -1) throw new InvalidDate("$dateTimeBegin: invalid date");
$dateTimeEnd=@strtotime($dateTimeEnd);
if($dateTimeEnd === -1) throw new InvalidDate("$dateTimeEnd: invalid date");
$dif=$dateTimeEnd - $dateTimeBegin;
if ($dif == 0) return "< 1 second";
if ($dif == 1) return "1 second";
$return_val = null;
$weeks = floor($dif / 604800);
if ($weeks > 0) {
$dif -= $weeks * 604800;
$return_val .= "$weeks week".(($weeks>1)?'s':'');
}
$days = floor($dif / 86400);
if ($days > 0) {
$dif -= $days * 86400;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$days day".(($days>1)?'s':'');
}
$hours = floor($dif/3600);
if ($hours > 0) {
$dif -= $hours * 3600;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$hours hour".(($hours>1)?'s':'');
}
$minutes = floor($dif/60);
if ($minutes > 0) {
$dif -= $minutes * 60;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$minutes minute".(($minutes>1)?'s':'');
}
$seconds = $dif;
if ($seconds > 0) {
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$seconds second".(($seconds>1)?'s':'');
}
return $return_val;
}
public static function format_date($date) {
$return_val = null;
$weeks = floor($date / 604800);
if ($weeks > 0) {
$dif -= $weeks * 604800;
$return_val .= "$weeks week".(($weeks>1)?'s':'');
}
$days = floor($date / 86400);
if ($days > 0) {
$date -= $days * 86400;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$days day".(($days>1)?'s':'');
}
$hours = floor($date/3600);
if ($hours > 0) {
$date -= $hours * 3600;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$hours hour".(($hours>1)?'s':'');
}
$minutes = floor($date/60);
if ($minutes > 0) {
$date -= $minutes * 60;
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$minutes minute".(($minutes>1)?'s':'');
}
$seconds = $date;
if ($seconds > 0) {
$return_val .= !is_null($return_val)?' and ':'';
$return_val .= "$seconds second".(($seconds>1)?'s':'');
}
return $return_val;
}
}