Campustream 1.0
A social network MQP for WPI
application/lib/date.php
Go to the documentation of this file.
00001 <?php
00002 
00006 class date {
00007 
00008         const TIME_OFFSET = 0;
00009 
00010         const ONE_MIN  = 60;
00011         const TWO_MIN  = 120;
00012         const ONE_HOUR = 3600;
00013         const TWO_HOUR = 7200;
00014         const ONE_DAY  = 86400;
00015         const TWO_DAY  = 172800;
00016 
00017         const DISPLAY_ONE_MIN  = 'less than a minute ago';
00018         const DISPLAY_TWO_MIN  = 'about a minute ago';
00019         const DISPLAY_ONE_HOUR = 'about %d minutes ago';
00020         const DISPLAY_TWO_HOUR = 'about an hour ago';
00021         const DISPLAY_ONE_DAY  = 'about %d hours ago';
00022         const DISPLAY_TWO_DAY  = '1 day ago';
00023         const DISPLAY_OTHER    = '%d days ago';
00024         
00025         // Add support for future dates
00026         const DISPLAY_FUTURE_ONE_MIN    = 'in a minute';
00027         const DISPLAY_FUTURE_TWO_MIN    = 'in a few minutes';
00028         const DISPLAY_FUTURE_ONE_HOUR   = 'in about %d minutes';
00029         const DISPLAY_FUTURE_TWO_HOUR   = 'in about an hour';
00030         const DISPLAY_FUTURE_ONE_DAY    = 'in about %d hours';
00031         const DISPLAY_FUTURE_TWO_DAY    = 'in about 1 day';
00032         const DISPLAY_FUTURE_OTHER              = 'in %d days';
00033         
00041         public static function relative_time( $timestamp ) {
00042                 
00043                 // Allows this function to take both a unix timestamp and a datetime string.
00044                 if ( is_numeric( $timestamp ) === false ) {
00045                         $timestamp = strtotime( $timestamp );
00046                 }
00047                 
00048                 $delta = time() + self::TIME_OFFSET - $timestamp;
00049                 
00050                 if ($delta > 0) {
00051                         if ( $delta < self::ONE_MIN ) {
00052                                 return self::DISPLAY_ONE_MIN;
00053                         } elseif ( $delta < self::TWO_MIN ) {
00054                                 return self::DISPLAY_TWO_MIN;
00055                         } elseif ( $delta < self::ONE_HOUR ) {
00056                                 return sprintf( self::DISPLAY_ONE_HOUR, floor( $delta / self::ONE_MIN ) );
00057                         } elseif ( $delta < self::TWO_HOUR ) {
00058                                 return self::DISPLAY_TWO_HOUR;
00059                         } elseif ( $delta < self::ONE_DAY ) {
00060                                 return sprintf( self::DISPLAY_ONE_DAY, floor( $delta / self::ONE_HOUR ) );
00061                         } elseif ( $delta < self::TWO_DAY ) {
00062                                 return self::DISPLAY_TWO_DAY;
00063                         } elseif ( $delta > self::TWO_DAY) {
00064                                 return sprintf( self::DISPLAY_OTHER, floor( $delta / self::ONE_DAY ) );
00065                         }
00066                 } else {
00067                         // FUTURE DATES
00068                         if ( $delta > -self::ONE_MIN ) {
00069                                 return self::DISPLAY_FUTURE_ONE_MIN;
00070                         } elseif ( $delta > -self::TWO_MIN ) {
00071                                 return self::DISPLAY_FUTURE_TWO_MIN;
00072                         } elseif ( $delta > -self::ONE_HOUR ) {
00073                                 return sprintf( self::DISPLAY_FUTURE_ONE_HOUR, abs(floor( $delta / self::ONE_MIN )) );
00074                         } elseif ( $delta > -self::TWO_HOUR ) {
00075                                 return self::DISPLAY_FUTURE_TWO_HOUR;
00076                         } elseif ( $delta > -self::ONE_DAY ) {
00077                                 return sprintf( self::DISPLAY_FUTURE_ONE_DAY, abs(floor( $delta / self::ONE_HOUR )) );
00078                         } elseif ( $delta > -self::TWO_DAY ) {
00079                                 return self::DISPLAY_FUTURE_TWO_DAY;
00080                         } elseif ( $delta < -self::TWO_DAY) {
00081                                 return sprintf( self::DISPLAY_FUTURE_OTHER, abs(floor( $delta / self::ONE_DAY )) );
00082                         }
00083                 }
00084         }
00085 
00086 }