Campustream 1.0
A social network MQP for WPI
|
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 }