Oppaitime's version of Gazelle
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

time.class.php 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. <?
  2. if (!extension_loaded('date')) {
  3. error('Date extension not loaded.');
  4. }
  5. function time_ago($TimeStamp) {
  6. if (!is_number($TimeStamp)) { // Assume that $TimeStamp is SQL timestamp
  7. if ($TimeStamp == '0000-00-00 00:00:00') {
  8. return false;
  9. }
  10. $TimeStamp = strtotime($TimeStamp);
  11. }
  12. if ($TimeStamp == 0) {
  13. return false;
  14. }
  15. return time() - $TimeStamp;
  16. }
  17. /*
  18. * Returns a <span> by default but can optionally return the raw time
  19. * difference in text (e.g. "16 hours and 28 minutes", "1 day, 18 hours").
  20. */
  21. function time_diff($TimeStamp, $Levels = 2, $Span = true, $Lowercase = false) {
  22. if (!is_number($TimeStamp)) { // Assume that $TimeStamp is SQL timestamp
  23. if ($TimeStamp == '0000-00-00 00:00:00') {
  24. return 'Never';
  25. }
  26. $TimeStamp = strtotime($TimeStamp);
  27. }
  28. if ($TimeStamp == 0) {
  29. return 'Never';
  30. }
  31. $Time = time() - $TimeStamp;
  32. // If the time is negative, then it expires in the future.
  33. if ($Time < 0) {
  34. $Time = -$Time;
  35. $HideAgo = true;
  36. }
  37. $Years = floor($Time / 31556926); // seconds in one year
  38. $Remain = $Time - $Years * 31556926;
  39. $Months = floor($Remain / 2629744); // seconds in one month
  40. $Remain = $Remain - $Months * 2629744;
  41. $Weeks = floor($Remain / 604800); // seconds in one week
  42. $Remain = $Remain - $Weeks * 604800;
  43. $Days = floor($Remain / 86400); // seconds in one day
  44. $Remain = $Remain - $Days * 86400;
  45. $Hours=floor($Remain / 3600); // seconds in one hour
  46. $Remain = $Remain - $Hours * 3600;
  47. $Minutes = floor($Remain / 60); // seconds in one minute
  48. $Remain = $Remain - $Minutes * 60;
  49. $Seconds = $Remain;
  50. $Return = '';
  51. if ($Years > 0 && $Levels > 0) {
  52. if ($Years > 1) {
  53. $Return .= "$Years years";
  54. } else {
  55. $Return .= "$Years year";
  56. }
  57. $Levels--;
  58. }
  59. if ($Months > 0 && $Levels > 0) {
  60. if ($Return != '') {
  61. $Return .= ', ';
  62. }
  63. if ($Months > 1) {
  64. $Return .= "$Months months";
  65. } else {
  66. $Return .= "$Months month";
  67. }
  68. $Levels--;
  69. }
  70. if ($Weeks > 0 && $Levels > 0) {
  71. if ($Return != '') {
  72. $Return .= ', ';
  73. }
  74. if ($Weeks > 1) {
  75. $Return .= "$Weeks weeks";
  76. } else {
  77. $Return .= "$Weeks week";
  78. }
  79. $Levels--;
  80. }
  81. if ($Days > 0 && $Levels > 0) {
  82. if ($Return != '') {
  83. $Return .= ', ';
  84. }
  85. if ($Days > 1) {
  86. $Return .= "$Days days";
  87. } else {
  88. $Return .= "$Days day";
  89. }
  90. $Levels--;
  91. }
  92. if ($Hours > 0 && $Levels > 0) {
  93. if ($Return != '') {
  94. $Return .= ', ';
  95. }
  96. if ($Hours > 1) {
  97. $Return .= "$Hours hours";
  98. } else {
  99. $Return .= "$Hours hour";
  100. }
  101. $Levels--;
  102. }
  103. if ($Minutes > 0 && $Levels > 0) {
  104. if ($Return != '') {
  105. $Return .= ' and ';
  106. }
  107. if ($Minutes > 1) {
  108. $Return .= "$Minutes mins";
  109. } else {
  110. $Return .= "$Minutes min";
  111. }
  112. $Levels--;
  113. }
  114. if ($Return == '') {
  115. $Return = 'Just now';
  116. } elseif (!isset($HideAgo)) {
  117. $Return .= ' ago';
  118. }
  119. if ($Lowercase) {
  120. $Return = strtolower($Return);
  121. }
  122. if ($Span) {
  123. return '<span class="time tooltip" title="'.date('M d Y, H:i', $TimeStamp).'">'.$Return.'</span>';
  124. } else {
  125. return $Return;
  126. }
  127. }
  128. /* SQL utility functions */
  129. function time_plus($Offset) {
  130. return date('Y-m-d H:i:s', time() + $Offset);
  131. }
  132. function time_minus($Offset, $Fuzzy = false) {
  133. if ($Fuzzy) {
  134. return date('Y-m-d 00:00:00', time() - $Offset);
  135. } else {
  136. return date('Y-m-d H:i:s', time() - $Offset);
  137. }
  138. }
  139. // This is never used anywhere with $timestamp set
  140. // TODO: Why don't we just use NOW() in the sql queries?
  141. function sqltime($timestamp = NULL) {
  142. return date('Y-m-d H:i:s', ($timestamp ?? time()));
  143. }
  144. function validDate($DateString) {
  145. $DateTime = explode(' ', $DateString);
  146. if (count($DateTime) != 2) {
  147. return false;
  148. }
  149. list($Date, $Time) = $DateTime;
  150. $SplitTime = explode(':', $Time);
  151. if (count($SplitTime) != 3) {
  152. return false;
  153. }
  154. list($H, $M, $S) = $SplitTime;
  155. if ($H != 0 && !(is_number($H) && $H < 24 && $H >= 0)) { return false; }
  156. if ($M != 0 && !(is_number($M) && $M < 60 && $M >= 0)) { return false; }
  157. if ($S != 0 && !(is_number($S) && $S < 60 && $S >= 0)) { return false; }
  158. $SplitDate = explode('-', $Date);
  159. if (count($SplitDate) != 3) {
  160. return false;
  161. }
  162. list($Y, $M, $D) = $SplitDate;
  163. return checkDate($M, $D, $Y);
  164. }
  165. function is_valid_date($Date) {
  166. return is_valid_datetime($Date, 'Y-m-d');
  167. }
  168. function is_valid_time($Time) {
  169. return is_valid_datetime($Time, 'H:i');
  170. }
  171. function is_valid_datetime($DateTime, $Format = 'Y-m-d H:i') {
  172. $FormattedDateTime = DateTime::createFromFormat($Format, $DateTime);
  173. return $FormattedDateTime && $FormattedDateTime->format($Format) == $DateTime;
  174. }
  175. ?>