/includes/adodb_lite/adodbSQL_drivers/postgres64/postgres64_date_module.inc

http://pacercms.googlecode.com/ · PHP · 316 lines · 269 code · 33 blank · 14 comment · 51 complexity · 903e2825be2b46955349d74e1c91407e MD5 · raw file

  1. <?php
  2. /**
  3. * ADOdb Lite Date Module for Postgres 64
  4. *
  5. */
  6. if (!defined('TIMESTAMP_FIRST_YEAR')) define('TIMESTAMP_FIRST_YEAR',100);
  7. @include(ADODB_DIR . '/adodb-time.inc.php');
  8. eval('class postgres64_date_EXTENDER extends '. $last_module . '_ADOConnection { }');
  9. class postgres64_date_ADOConnection extends postgres64_date_EXTENDER
  10. {
  11. var $fmtDate = "'Y-m-d'"; // used by DBDate() as the default date format used by the database
  12. var $fmtTimeStamp = "'Y-m-d H:i:s'"; // used by DBTimeStamp as the default timestamp fmt.
  13. var $emptyDate = '&nbsp;';
  14. var $emptyTimeStamp = '&nbsp;';
  15. var $sysDate = "CURRENT_DATE";
  16. var $sysTimeStamp = "CURRENT_TIMESTAMP";
  17. var $isoDates = true; /// accepts dates in ISO format
  18. function Time()
  19. {
  20. $rs =& $this->_Execute("select $this->sysTimeStamp");
  21. if ($rs && !$rs->EOF)
  22. return $this->UnixTimeStamp(reset($rs->fields));
  23. return false;
  24. }
  25. function OffsetDate($dayFraction, $date=false)
  26. {
  27. if (!$date)
  28. $date = $this->sysDate;
  29. else if (strncmp($date,"'",1) == 0) {
  30. $len = strlen($date);
  31. if (10 <= $len && $len <= 12)
  32. $date = 'date ' . $date;
  33. else $date = 'timestamp ' . $date;
  34. }
  35. return "($date+interval'$dayFraction days')";
  36. }
  37. function SetDateLocale($locale = 'En')
  38. {
  39. $this->locale = $locale;
  40. switch (strtoupper($locale))
  41. {
  42. case 'EN':
  43. $this->fmtDate="'Y-m-d'";
  44. $this->fmtTimeStamp = "'Y-m-d H:i:s'";
  45. break;
  46. case 'US':
  47. $this->fmtDate = "'m-d-Y'";
  48. $this->fmtTimeStamp = "'m-d-Y H:i:s'";
  49. break;
  50. case 'NL':
  51. case 'FR':
  52. case 'RO':
  53. case 'IT':
  54. $this->fmtDate="'d-m-Y'";
  55. $this->fmtTimeStamp = "'d-m-Y H:i:s'";
  56. break;
  57. case 'GE':
  58. $this->fmtDate="'d.m.Y'";
  59. $this->fmtTimeStamp = "'d.m.Y H:i:s'";
  60. break;
  61. default:
  62. $this->fmtDate="'Y-m-d'";
  63. $this->fmtTimeStamp = "'Y-m-d H:i:s'";
  64. break;
  65. }
  66. }
  67. function DBDate($date)
  68. {
  69. if (empty($date) && $date !== 0)
  70. return 'null';
  71. if (is_string($date) && !is_numeric($date)) {
  72. if ($date === 'null' || strncmp($date, "'", 1) === 0)
  73. return $date;
  74. if ($this->isoDates)
  75. return "'$date'";
  76. $date = $this->UnixDate($date);
  77. }
  78. return adodb_date($this->fmtDate,$date);
  79. }
  80. function DBTimeStamp($timestamp)
  81. {
  82. if (empty($timestamp) && $timestamp !== 0)
  83. return 'null';
  84. # strlen(14) allows YYYYMMDDHHMMSS format
  85. if (!is_string($timestamp) || (is_numeric($timestamp) && strlen($timestamp)<14))
  86. return adodb_date($this->fmtTimeStamp, $timestamp);
  87. if ($timestamp === 'null')
  88. return $timestamp;
  89. if ($this->isoDates && strlen($timestamp) !== 14)
  90. return "'$timestamp'";
  91. $timestamp = $this->UnixTimeStamp($timestamp);
  92. return adodb_date($this->fmtTimeStamp, $timestamp);
  93. }
  94. function UnixDate($v)
  95. {
  96. if (is_object($v)) {
  97. // odbtp support
  98. //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 )
  99. return adodb_mktime($v->hour, $v->minute, $v->second, $v->month, $v->day, $v->year);
  100. }
  101. if (is_numeric($v) && strlen($v) !== 8)
  102. return $v;
  103. if (!preg_match( "|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})|", ($v), $rr))
  104. return false;
  105. if ($rr[1] <= TIMESTAMP_FIRST_YEAR)
  106. return 0;
  107. // h-m-s-MM-DD-YY
  108. return adodb_mktime(0, 0, 0, $rr[2], $rr[3], $rr[1]);
  109. }
  110. function UnixTimeStamp($v)
  111. {
  112. if (is_object($v)) {
  113. // odbtp support
  114. //( [year] => 2004 [month] => 9 [day] => 4 [hour] => 12 [minute] => 44 [second] => 8 [fraction] => 0 )
  115. return adodb_mktime($v->hour, $v->minute, $v->second, $v->month, $v->day, $v->year);
  116. }
  117. if (!preg_match("|^([0-9]{4})[-/\.]?([0-9]{1,2})[-/\.]?([0-9]{1,2})[ ,-]*(([0-9]{1,2}):?([0-9]{1,2}):?([0-9\.]{1,4}))?|", ($v), $rr))
  118. return false;
  119. if ($rr[1] <= TIMESTAMP_FIRST_YEAR && $rr[2]<= 1)
  120. return 0;
  121. // h-m-s-MM-DD-YY
  122. if (!isset($rr[5]))
  123. return adodb_mktime(0, 0, 0, $rr[2], $rr[3], $rr[1]);
  124. else return adodb_mktime($rr[5], $rr[6], $rr[7], $rr[2], $rr[3], $rr[1]);
  125. }
  126. function UserDate($v, $fmt='Y-m-d', $gmt=false)
  127. {
  128. $tt = $this->UnixDate($v);
  129. // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
  130. if (($tt === false || $tt == -1) && $v != false)
  131. return $v;
  132. else if ($tt == 0)
  133. return $this->emptyDate;
  134. else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR
  135. }
  136. return ($gmt) ? adodb_gmdate($fmt, $tt) : adodb_date($fmt, $tt);
  137. }
  138. function UserTimeStamp($v, $fmt='Y-m-d H:i:s', $gmt=false)
  139. {
  140. if (!isset($v))
  141. return $this->emptyTimeStamp;
  142. # strlen(14) allows YYYYMMDDHHMMSS format
  143. if (is_numeric($v) && strlen($v)<14)
  144. return ($gmt) ? adodb_gmdate($fmt,$v) : adodb_date($fmt,$v);
  145. $tt = $this->UnixTimeStamp($v);
  146. // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
  147. if (($tt === false || $tt == -1) && $v != false)
  148. return $v;
  149. if ($tt == 0)
  150. return $this->emptyTimeStamp;
  151. else return ($gmt) ? adodb_gmdate($fmt,$tt) : adodb_date($fmt,$tt);
  152. }
  153. function SQLDate($fmt, $col=false)
  154. {
  155. if (!$col)
  156. $col = $this->sysTimeStamp;
  157. $s = 'TO_CHAR('.$col.",'";
  158. $len = strlen($fmt);
  159. for ($i=0; $i < $len; $i++) {
  160. $ch = $fmt[$i];
  161. switch($ch) {
  162. case 'Y':
  163. case 'y':
  164. $s .= 'YYYY';
  165. break;
  166. case 'Q':
  167. case 'q':
  168. $s .= 'Q';
  169. break;
  170. case 'M':
  171. $s .= 'Mon';
  172. break;
  173. case 'm':
  174. $s .= 'MM';
  175. break;
  176. case 'D':
  177. case 'd':
  178. $s .= 'DD';
  179. break;
  180. case 'H':
  181. $s.= 'HH24';
  182. break;
  183. case 'h':
  184. $s .= 'HH';
  185. break;
  186. case 'i':
  187. $s .= 'MI';
  188. break;
  189. case 's':
  190. $s .= 'SS';
  191. break;
  192. case 'a':
  193. case 'A':
  194. $s .= 'AM';
  195. break;
  196. case 'w':
  197. $s .= 'D';
  198. break;
  199. case 'l':
  200. $s .= 'DAY';
  201. break;
  202. default:
  203. // handle escape characters...
  204. if ($ch == '\\') {
  205. $i++;
  206. $ch = substr($fmt,$i,1);
  207. }
  208. if (strpos('-/.:;, ',$ch) !== false)
  209. $s .= $ch;
  210. else $s .= '"'.$ch.'"';
  211. }
  212. }
  213. return $s. "')";
  214. }
  215. }
  216. eval('class postgres64_date_resultset_EXTENDER extends '. $last_module . '_ResultSet { }');
  217. class postgres64_date_ResultSet extends postgres64_date_resultset_EXTENDER
  218. {
  219. var $emptyTimeStamp = '&nbsp;'; /// what to display when $time==0
  220. var $emptyDate = '&nbsp;'; /// what to display when $time==0
  221. var $datetime = false;
  222. function UserTimeStamp($v, $fmt='Y-m-d H:i:s')
  223. {
  224. if (is_numeric($v) && strlen($v)<14)
  225. return adodb_date($fmt,$v);
  226. $tt = $this->UnixTimeStamp($v);
  227. // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
  228. if (($tt === false || $tt == -1) && $v != false)
  229. return $v;
  230. if ($tt === 0)
  231. return $this->emptyTimeStamp;
  232. else return adodb_date($fmt,$tt);
  233. }
  234. function UserDate($v,$fmt='Y-m-d')
  235. {
  236. $tt = $this->UnixDate($v);
  237. // $tt == -1 if pre TIMESTAMP_FIRST_YEAR
  238. if (($tt === false || $tt == -1) && $v != false)
  239. return $v;
  240. else if ($tt == 0)
  241. return $this->emptyDate;
  242. else if ($tt == -1) { // pre-TIMESTAMP_FIRST_YEAR
  243. }
  244. return adodb_date($fmt,$tt);
  245. }
  246. function UnixDate($v)
  247. {
  248. return postgres64_date_ADOConnection::UnixDate($v);
  249. }
  250. function UnixTimeStamp($v)
  251. {
  252. return postgres64_date_ADOConnection::UnixTimeStamp($v);
  253. }
  254. }
  255. ?>