PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/add-ons/ical/functions/is_daylight.php

https://github.com/jcplat/console-seolan
PHP | 296 lines | 266 code | 24 blank | 6 comment | 7 complexity | 33174d9b89ab0f94eb0eea91cbda9479 MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, GPL-3.0, Apache-2.0, BSD-3-Clause
  1. <?php
  2. /* values are offset in hhmm (not seconds!) relative to GMT
  3. case The first value is for standard, and the second value is for daylight
  4. */
  5. function is_daylight($time, $timezone){
  6. global $tz_array, $summary;
  7. # default to std time, overwrite if daylight.
  8. $dlst = 0;
  9. # Subtract the offset for std time. This will be slightly off in some cases, but will be closer than using nothing (?).
  10. $time = $time - calcOffset($tz_array[$timezone][0]);
  11. $year = date("Y", $time);
  12. $month = date("m",$time);
  13. $day = date("d",$time);
  14. $hour = date("H",$time);
  15. if(isset($tz_array[$timezone]['dt_start'][$year]) && isset($tz_array[$timezone]['st_start'][$year])){
  16. $start = $tz_array[$timezone]['dt_start'][$year];
  17. $end = $tz_array[$timezone]['st_start'][$year];
  18. }else{
  19. switch ($timezone){
  20. case 'US/Samoa': # array('-1100', '-1100');
  21. case 'America/Adak': # array('-1000', '-0900');
  22. case 'America/Atka':
  23. case 'US/Aleutian':
  24. case 'America/Anchorage': # array('-0900', '-0800');
  25. case 'America/Nome':
  26. case 'US/Alaska':
  27. case 'America/Juneau':
  28. case 'America/Yakutat':
  29. case 'America/Dawson': # array('-0800', '-0700');
  30. case 'America/Los_Angeles':
  31. case 'America/Vancouver':
  32. case 'America/Whitehorse':
  33. case 'Canada/Pacific':
  34. case 'Canada/Yukon':
  35. case 'PST8PDT':
  36. case 'US/Pacific':
  37. case 'America/Boise': # array('-0700', '-0600');
  38. case 'America/Cambridge_Bay':
  39. case 'America/Denver':
  40. case 'America/Edmonton':
  41. case 'America/Inuvik':
  42. case 'America/Shiprock':
  43. case 'America/Yellowknife':
  44. case 'Canada/Mountain':
  45. case 'MST7MDT':
  46. case 'Navajo':
  47. case 'US/Mountain':
  48. case 'America/Chicago': # array('-0600', '-0500');
  49. case 'America/Menominee':
  50. case 'America/Merida':
  51. case 'America/Rainy_River':
  52. case 'America/Rankin_Inlet':
  53. case 'America/Winnipeg':
  54. case 'Canada/Central':
  55. case 'CST6CDT':
  56. case 'US/Central':
  57. case 'America/Detroit': # array('-0500', '-0400');
  58. case 'America/Grand_Turk':
  59. case 'America/Iqaluit':
  60. case 'America/Kentucky/Louisville':
  61. case 'America/Kentucky/Monticello':
  62. case 'America/Louisville':
  63. case 'America/Montreal':
  64. case 'America/Nassau':
  65. case 'America/New_York':
  66. case 'America/Nipigon':
  67. case 'America/Pangnirtung':
  68. case 'America/Thunder_Bay':
  69. case 'Canada/Eastern':
  70. case 'EST5EDT':
  71. case 'US/Eastern':
  72. case 'US/Michigan':
  73. case 'America/Glace_Bay': # array('-0400', '-0300');
  74. case 'America/Goose_Bay':
  75. case 'America/Halifax':
  76. case 'America/Thule':
  77. case 'Canada/Atlantic':
  78. case 'America/St_Johns': # array('-0330', '-0230');
  79. case 'Canada/Newfoundland':
  80. case 'America/Godthab': # array('-0300', '-0200');
  81. case 'America/Miquelon':
  82. if ($year < 2007){
  83. $start = strtotime("+1 Sun",strtotime($year."0331"));
  84. $end = strtotime("-1 Sun",strtotime($year."1101"));
  85. }else{
  86. $start = strtotime("+2 Sun",strtotime($year."0300"));
  87. $end = strtotime("+1 Sun",strtotime($year."1031"));
  88. }
  89. break;
  90. case 'America/Havana':
  91. case 'Cuba':
  92. $start = strtotime("+3 Sun",strtotime($year."0300"));
  93. $end = strtotime("-1 Sun",strtotime($year."1101"));
  94. break;
  95. case 'America/Cancun':
  96. case 'America/Chihuahua':
  97. case 'America/Ensenada':
  98. case 'America/Tijuana':
  99. case 'America/Mexico_City':
  100. case 'America/Monterrey':
  101. case 'Atlantic/Bermuda':
  102. case 'Mexico/BajaSur':
  103. case 'Mexico/BajaNorte':
  104. case 'Mexico/General':
  105. case 'America/Mazatlan':
  106. $start = strtotime("+1 Sun",strtotime($year."0331"));
  107. $end = strtotime("-1 Sun",strtotime($year."1101"));
  108. break;
  109. case 'Chile/EasterIsland': # array('-0500', '-0600');
  110. case 'Pacific/Easter':
  111. break;
  112. case 'America/Asuncion': # array('-0300', '-0400');
  113. case 'America/Cuiaba':
  114. case 'America/Santiago':
  115. case 'Antarctica/Palmer':
  116. case 'Atlantic/Stanley':
  117. case 'Chile/Continental':
  118. break;
  119. case 'America/Araguaina': # array('-0200', '-0300');
  120. case 'America/Sao_Paulo':
  121. case 'Brazil/East':
  122. break;
  123. case 'America/Scoresbysund': # array('-0100', '+0000');
  124. case 'Atlantic/Azores':
  125. break;
  126. case 'Atlantic/Canary': # array('+0000', '+0100');
  127. case 'Atlantic/Faeroe':
  128. case 'Atlantic/Madeira':
  129. case 'Eire':
  130. case 'Europe/Belfast':
  131. case 'Europe/Dublin':
  132. case 'Europe/Lisbon':
  133. case 'Europe/London':
  134. case 'GB-Eire':
  135. case 'GB':
  136. case 'Portugal':
  137. case 'WET':
  138. case 'Africa/Ceuta': # array('+0100', '+0200');
  139. case 'Arctic/Longyearbyen':
  140. case 'CET':
  141. case 'Europe/Amsterdam':
  142. case 'Europe/Andorra':
  143. case 'Europe/Belgrade':
  144. case 'Europe/Berlin':
  145. case 'Europe/Bratislava':
  146. case 'Europe/Brussels':
  147. case 'Europe/Budapest':
  148. case 'Europe/Copenhagen':
  149. case 'Europe/Gibraltar':
  150. case 'Europe/Ljubljana':
  151. case 'Europe/Luxembourg':
  152. case 'Europe/Madrid':
  153. case 'Europe/Malta':
  154. case 'Europe/Monaco':
  155. case 'Europe/Oslo':
  156. case 'Europe/Paris':
  157. case 'Europe/Prague':
  158. case 'Europe/Rome':
  159. case 'Europe/San_Marino':
  160. case 'Europe/Sarajevo':
  161. case 'Europe/Skopje':
  162. case 'Europe/Stockholm':
  163. case 'Europe/Tirane':
  164. case 'Europe/Vaduz':
  165. case 'Europe/Vatican':
  166. case 'Europe/Vienna':
  167. case 'Europe/Warsaw':
  168. case 'Europe/Zagreb':
  169. case 'Europe/Zurich':
  170. case 'MET':
  171. case 'Poland':
  172. case 'Europe/Athens':
  173. case 'Europe/Bucharest':
  174. case 'Europe/Chisinau':
  175. case 'Europe/Helsinki':
  176. case 'Europe/Istanbul':
  177. case 'Europe/Kaliningrad':
  178. case 'Europe/Kiev':
  179. case 'Europe/Minsk':
  180. case 'Europe/Nicosia':
  181. case 'Europe/Riga':
  182. case 'Europe/Simferopol':
  183. case 'Europe/Sofia':
  184. case 'Europe/Tiraspol':
  185. case 'Europe/Uzhgorod':
  186. case 'Europe/Zaporozhye':
  187. case 'EET':
  188. $start = strtotime("-1 Sun",strtotime($year."0401"));
  189. $end = strtotime("-1 Sun",strtotime($year."1101"));
  190. break;
  191. case 'Africa/Windhoek': # array('+0200', '+0100');
  192. break;
  193. case 'Asia/Amman': # array('+0200', '+0300');
  194. case 'Asia/Beirut':
  195. case 'Asia/Damascus':
  196. case 'Asia/Gaza':
  197. case 'Asia/Istanbul':
  198. case 'Asia/Jerusalem':
  199. case 'Asia/Nicosia':
  200. case 'Asia/Tel_Aviv':
  201. case 'Egypt':
  202. case 'Israel':
  203. case 'Turkey':
  204. break;
  205. case 'Asia/Baghdad': # array('+0300', '+0400');
  206. case 'Europe/Moscow':
  207. case 'W-SU':
  208. break;
  209. case 'Asia/Tehran': # array('+0330', '+0430');
  210. case 'Iran':
  211. break;
  212. case 'Asia/Aqtau': # array('+0400', '+0500');
  213. case 'Asia/Baku':
  214. case 'Asia/Tbilisi':
  215. case 'Asia/Yerevan':
  216. case 'Europe/Samara':
  217. break;
  218. case 'Asia/Aqtobe': # array('+0500', '+0600');
  219. case 'Asia/Bishkek':
  220. case 'Asia/Yekaterinburg':
  221. break;
  222. case 'Asia/Almaty': # array('+0600', '+0700');
  223. case 'Asia/Novosibirsk':
  224. case 'Asia/Omsk':
  225. break;
  226. case 'Asia/Krasnoyarsk': # array('+0700', '+0800');
  227. break;
  228. case 'Asia/Irkutsk': # array('+0800', '+0900');
  229. break;
  230. case 'Asia/Yakutsk': # array('+0900', '+1000');
  231. break;
  232. case 'Asia/Vladivostok': # array('+1000', '+1100');
  233. case 'Australia/ACT':
  234. case 'Australia/Melbourne':
  235. case 'Australia/NSW':
  236. case 'Australia/Sydney':
  237. case 'Australia/Tasmania':
  238. case 'Australia/Victoria':
  239. break;
  240. case 'Australia/Adelaide': # array('+1030', '+0930');
  241. case 'Australia/Broken_Hill':
  242. case 'Australia/South':
  243. case 'Australia/Yancowinna':
  244. break;
  245. case 'Asia/Magadan': # array('+1100', '+1200');
  246. break;
  247. case 'Australia/LHI': # array('+1100', '+1030');
  248. case 'Australia/Lord_Howe':
  249. break;
  250. case 'Australia/Canberra': # array('+1100', '+1000');
  251. case 'Australia/Hobart':
  252. break;
  253. case 'Asia/Anadyr': # array('+1200', '+1300');
  254. case 'Asia/Kamchatka':
  255. break;
  256. case 'Antarctica/McMurdo':
  257. case 'Antarctica/South_Pole':
  258. case 'NZ': # array('+1300', '+1200');
  259. case 'Pacific/Auckland':
  260. break;
  261. case 'NZ-CHAT':
  262. case 'Pacific/Chatham': # array('+1345', '+1245');
  263. break;
  264. default:
  265. $dlst = date('I', $time);
  266. }
  267. }
  268. if (isset($start,$end) && $time >= $start && $time < $end) $dlst = 1;
  269. #echo "$summary $dlst <br>";
  270. return $dlst;
  271. }
  272. ?>