Translate timestamp into words using PHP

Posted: May 28th, 2009 | Author: | Filed under: PHP | Tags: , | 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;
    	}
    }