BioTorrents.de’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.4KB

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