date.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <?php
  2. /**
  3. ** date.php
  4. **
  5. ** Takes a date and parses it into a usable format. The form that a
  6. ** date SHOULD arrive in is:
  7. ** <Tue,> 29 Jun 1999 09:52:11 -0500 (EDT)
  8. ** (as specified in RFC 822) -- "Tue" is optional
  9. **
  10. **/
  11. $date_php = true;
  12. function getMinutes($hour) {
  13. $date = $hour;
  14. if (($hour == 0) || ($hour == "00"))
  15. $date = "00";
  16. else if (($hour == 1) || ($hour == "01"))
  17. $date = "01";
  18. else if (($hour == 2) || ($hour == "02"))
  19. $date = "02";
  20. else if (($hour == 3) || ($hour == "03"))
  21. $date = "03";
  22. else if (($hour == 4) || ($hour == "04"))
  23. $date = "04";
  24. else if (($hour == 5) || ($hour == "05"))
  25. $date = "05";
  26. else if (($hour == 6) || ($hour == "06"))
  27. $date = "06";
  28. else if (($hour == 7) || ($hour == "07"))
  29. $date = "07";
  30. else if (($hour == 8) || ($hour == "08"))
  31. $date = "08";
  32. else if (($hour == 9) || ($hour == "09"))
  33. $date = "09";
  34. return $date;
  35. }
  36. // corrects a time stamp to be the local time
  37. function getGMTSeconds($stamp, $gmt) {
  38. if (($gmt == "Pacific") || ($gmt == "PST"))
  39. $gmt = "-0800";
  40. else if (($gmt == "EDT"))
  41. $gmt = "-0400";
  42. else if (($gmt == "Eastern") || ($gmt == "EST") || ($gmt == "CDT"))
  43. $gmt = "-0500";
  44. else if (($gmt == "Central") || ($gmt == "CST") || ($gmt == "MDT"))
  45. $gmt = "-0600";
  46. else if (($gmt == "Mountain") || ($gmt == "MST") || ($gmt == "PDT"))
  47. $gmt = "-0700";
  48. else if ($gmt == "BST")
  49. $gmt = "+0100";
  50. else if ($gmt == "EET")
  51. $gmt = "+0200";
  52. else if ($gmt == "GMT")
  53. $gmt = "+0000";
  54. else if ($gmt == "HKT")
  55. $gmt = "+0800";
  56. else if ($gmt == "IST")
  57. $gmt = "+0200";
  58. else if ($gmt == "JST")
  59. $gmt = "+0900";
  60. else if ($gmt == "MET")
  61. $gmt = "+0100";
  62. else if ($gmt == "MET DST" || $gmt == "METDST")
  63. $gmt = "+0200";
  64. if (substr($gmt, 0, 1) == "-") {
  65. $neg = true;
  66. $gmt = substr($gmt, 1, strlen($gmt));
  67. } else if (substr($gmt, 0, 1) == "+") {
  68. $neg = false;
  69. $gmt = substr($gmt, 1, strlen($gmt));
  70. } else
  71. $neg = false;
  72. $gmt = substr($gmt, 0, 2);
  73. $gmt = $gmt * 3600;
  74. if ($neg == true)
  75. $gmt = "-$gmt";
  76. else
  77. $gmt = "+$gmt";
  78. /** now find what the server is at **/
  79. $current = date("Z", time());
  80. $stamp = (int)$stamp - (int)$gmt + (int)$current;
  81. return $stamp;
  82. }
  83. function getHour($hour) {
  84. $time = explode(":", $hour);
  85. return $time[0];
  86. }
  87. function getMinute($min) {
  88. $time = explode(":", $min);
  89. return $time[1];
  90. }
  91. function getSecond($sec) {
  92. $time = explode(":", $sec);
  93. return $time[2];
  94. }
  95. function getMonthNum($month) {
  96. if (eregi("jan|january", $month, $tmp))
  97. $date = "01";
  98. else if (eregi("feb|february|febuary", $month, $tmp))
  99. $date = "02";
  100. else if (eregi("mar|march", $month, $tmp))
  101. $date = "03";
  102. else if (eregi("apr|april", $month, $tmp))
  103. $date = "04";
  104. else if (eregi("may", $month, $tmp))
  105. $date = "05";
  106. else if (eregi("jun|june", $month, $tmp))
  107. $date = "06";
  108. else if (eregi("jul|july", $month, $tmp))
  109. $date = "07";
  110. else if (eregi("aug|august", $month, $tmp))
  111. $date = "08";
  112. else if (eregi("sep|sept|september", $month, $tmp))
  113. $date = "09";
  114. else if (eregi("oct|october", $month, $tmp))
  115. $date = "10";
  116. else if (eregi("nov|november", $month, $tmp))
  117. $date = "11";
  118. else if (eregi("dec|december", $month, $tmp))
  119. $date = "12";
  120. return $date;
  121. }
  122. function getDayOfWeek($day) {
  123. $date = "{WEEKDAY}";
  124. if (eregi("(mon|monday)", $day, $tmp))
  125. $date = "Mon";
  126. else if (eregi("(tue|tuesday)", $day, $tmp))
  127. $date = "Tue";
  128. else if (eregi("(wed|wednesday)", $day, $tmp))
  129. $date = "Wed";
  130. else if (eregi("(thurs|thu|thursday)", $day, $tmp))
  131. $date = "Thu";
  132. else if (eregi("(fri|friday)", $day, $tmp))
  133. $date = "Fri";
  134. else if (eregi("(sat|saturday)", $day, $tmp))
  135. $date = "Sat";
  136. else if (eregi("(sun|sunday)", $day, $tmp))
  137. $date = "Sun";
  138. return $date;
  139. }
  140. function getDayOfMonth($day) {
  141. return ereg_replace("^0", "", $day); /* remove a preceeding 0 */
  142. }
  143. function getMonth($month) {
  144. $date = "{MONTH}";
  145. if (eregi("jan|january", $month, $tmp))
  146. $date = "Jan";
  147. else if (eregi("feb|february|febuary", $month, $tmp))
  148. $date = "Feb";
  149. else if (eregi("mar|march", $month, $tmp))
  150. $date = "Mar";
  151. else if (eregi("apr|april", $month, $tmp))
  152. $date = "Apr";
  153. else if (eregi("may", $month, $tmp))
  154. $date = "May";
  155. else if (eregi("jun|june", $month, $tmp))
  156. $date = "Jun";
  157. else if (eregi("jul|july", $month, $tmp))
  158. $date = "Jul";
  159. else if (eregi("aug|august", $month, $tmp))
  160. $date = "Aug";
  161. else if (eregi("sep|sept|september", $month, $tmp))
  162. $date = "Sep";
  163. else if (eregi("oct|october", $month, $tmp))
  164. $date = "Oct";
  165. else if (eregi("nov|november", $month, $tmp))
  166. $date = "Nov";
  167. else if (eregi("dec|december", $month, $tmp))
  168. $date = "Dec";
  169. return $date;
  170. }
  171. function getYear($year) {
  172. return $year;
  173. }
  174. function getLongDateString($stamp) {
  175. return date("D, F j, Y g:i a", $stamp);
  176. }
  177. function getDateString($stamp) {
  178. $now = time();
  179. $midnight = $now - ($now % 86400) - date("Z", $now);
  180. if ($midnight < $stamp) {
  181. // Today
  182. return date("g:i a", $stamp);
  183. } else if ($midnight - (60 * 60 * 24 * 6) < $stamp) {
  184. // This week
  185. return date("D, g:i a", $stamp);
  186. } else {
  187. // before this week
  188. return date("M j, Y", $stamp);
  189. }
  190. }
  191. function getTimeStamp($dateParts) {
  192. /** $dateParts[0] == <day of week> Mon, Tue, Wed
  193. ** $dateParts[1] == <day of month> 23
  194. ** $dateParts[2] == <month> Jan, Feb, Mar
  195. ** $dateParts[3] == <year> 1999
  196. ** $dateParts[4] == <time> 18:54:23 (HH:MM:SS)
  197. ** $dateParts[5] == <from GMT> +0100
  198. ** $dateParts[6] == <zone> (EDT)
  199. **
  200. ** NOTE: In RFC 822, it states that <day of week> is optional.
  201. ** In that case, dateParts[0] would be the <day of month>
  202. ** and everything would be bumped up one.
  203. **/
  204. // Simply check to see if the first element in the dateParts
  205. // array is an integer or not.
  206. // Since the day of week is optional, this check is needed.
  207. //
  208. // The old code used eregi("mon|tue|wed|thu|fri|sat|sun",
  209. // $dateParts[0], $tmp) to find if the first element was the
  210. // day of week or day of month. This is an expensive call
  211. // (processing time) to have inside a loop. Doing it this way
  212. // saves quite a bit of time for large mailboxes.
  213. //
  214. // It is also quicker to call explode only once rather than
  215. // the 3 times it was getting called by calling the functions
  216. // getHour, getMinute, and getSecond.
  217. //
  218. if (intval(trim($dateParts[0])) > 0) {
  219. $time = explode(":", $dateParts[3]);
  220. $d[0] = $time[0];
  221. $d[1] = $time[1];
  222. $d[2] = $time[2];
  223. $d[3] = getMonthNum(trim($dateParts[1]));
  224. $d[4] = getDayOfMonth(trim($dateParts[0]));
  225. $d[5] = getYear(trim($dateParts[2]));
  226. return getGMTSeconds(mktime($d[0], $d[1], $d[2], $d[3], $d[4], $d[5]), $dateParts[4]);
  227. }
  228. $time = explode(":", $dateParts[4]);
  229. $d[0] = $time[0];
  230. $d[1] = $time[1];
  231. $d[2] = $time[2];
  232. $d[3] = getMonthNum(trim($dateParts[2]));
  233. $d[4] = getDayOfMonth(trim($dateParts[1]));
  234. $d[5] = getYear(trim($dateParts[3]));
  235. return getGMTSeconds(mktime($d[0], $d[1], $d[2], $d[3], $d[4], $d[5]), $dateParts[5]);
  236. }
  237. // I use this function for profiling. Should never be called in
  238. // actual versions of squirrelmail released to public.
  239. function getmicrotime() {
  240. $mtime = microtime();
  241. $mtime = explode(" ",$mtime);
  242. $mtime = $mtime[1] + $mtime[0];
  243. return ($mtime);
  244. }
  245. ?>