1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
47: class Timestamp extends AlphaType implements AlphaTypeInterface {
48: 49: 50: 51: 52: 53:
54: private $year;
55:
56: 57: 58: 59: 60: 61:
62: private $month;
63:
64: 65: 66: 67: 68: 69:
70: private $day;
71:
72: 73: 74: 75: 76: 77:
78: private $hour;
79:
80: 81: 82: 83: 84: 85:
86: private $minute;
87:
88: 89: 90: 91: 92: 93:
94: private $second;
95:
96: 97: 98: 99: 100: 101:
102: private $weekday;
103:
104: 105: 106: 107: 108: 109:
110: private $validationRule;
111:
112: 113: 114: 115: 116: 117:
118: private $helper= 'Not a valid timestamp value! A timestamp should be in the format YYYY-MM-DD HH:MM:SS.';
119:
120: 121: 122: 123: 124: 125:
126: public function __construct($timestamp='') {
127: global $config;
128:
129: $this->validationRule = AlphaValidator::ALLOW_ALL;
130:
131: if(empty($timestamp)) {
132: if($config->get('app.default.datetime') == 'now') {
133: $this->year=date('Y');
134: $this->month=date('m');
135: $this->day=date('d');
136: $this->weekday=date('l');
137: $this->hour=date('H');
138: $this->minute=date('i');
139: $this->second=date('s');
140: }else{
141: $this->year = '0000';
142: $this->month = '00';
143: $this->day = '00';
144: $this->hour = '00';
145: $this->minute = '00';
146: $this->second = '00';
147: }
148: }else{
149: if (preg_match($this->validationRule, $timestamp)) {
150: $this->populateFromString($timestamp);
151: }else{
152: throw new IllegalArguementException($this->helper);
153: }
154: }
155: }
156:
157: 158: 159: 160: 161: 162:
163: public function setValue($dateTime) {
164: $this->populateFromString($dateTime);
165: }
166:
167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178:
179: public function setTimestampValue($year, $month, $day, $hour, $minute, $second) {
180: $valid = null;
181:
182: if (!preg_match('/^[0-9]{4}$/', $year))
183: $valid = 'The year value '.$year.' provided is invalid!';
184: if (!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $month))
185: $valid = 'The month value '.$month.' provided is invalid!';
186: if (!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $day))
187: $valid = 'The day value '.$day.' provided is invalid!';
188: if (!isset($valid) && !checkdate($month, $day, $year))
189: $valid = 'The day value '.$year.'-'.$month.'-'.$day.' provided is invalid!';
190: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $hour) || !($hour >= 0 && $hour < 24))
191: $valid = 'The hour value '.$hour.' provided is invalid!';
192: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $minute) || !($minute >= 0 && $minute < 60))
193: $valid = 'The minute value '.$minute.' provided is invalid!';
194: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $second) || !($second >= 0 && $second < 60))
195: $valid = 'The second value '.$second.' provided is invalid!';
196:
197: if (isset($valid)){
198: throw new IllegalArguementException($valid);
199: }else{
200: $this->year = $year;
201: $this->month = str_pad($month, 2, '0', STR_PAD_LEFT);
202: $this->day = str_pad($day, 2, '0', STR_PAD_LEFT);
203: $this->hour = str_pad($hour, 2, '0', STR_PAD_LEFT);
204: $this->minute = str_pad($minute, 2, '0', STR_PAD_LEFT);
205: $this->second = str_pad($second, 2, '0', STR_PAD_LEFT);
206: $unixTime = mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
207: $this->weekday=date('l', $unixTime);
208: }
209: }
210:
211: 212: 213: 214: 215: 216:
217: public function getValue() {
218: return $this->year.'-'.$this->month.'-'.$this->day.' '.$this->hour.':'.$this->minute.':'.$this->second;
219: }
220:
221: 222: 223: 224: 225: 226:
227: public function getUnixValue() {
228: return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
229: }
230:
231: 232: 233: 234: 235: 236:
237: public function getDate() {
238: return $this->year.'-'.$this->month.'-'.$this->day;
239: }
240:
241: 242: 243: 244: 245: 246:
247: public function getEuroValue() {
248: return $this->day.'/'.$this->month.'/'.mb_substr($this->year, 2, 2);
249: }
250:
251: 252: 253: 254: 255: 256: 257: 258: 259:
260: public function setDate($year, $month, $day) {
261: $valid = null;
262:
263: if (!preg_match('/^[0-9]{4}$/', $year))
264: $valid = 'The year value '.$year.' provided is invalid!';
265: if (!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $month))
266: $valid = 'The month value '.$month.' provided is invalid!';
267: if (!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $day))
268: $valid = 'The day value '.$day.' provided is invalid!';
269: if (!isset($valid) && !checkdate($month, $day, $year))
270: $valid = 'The day value '.$year.'/'.$month.'/'.$day.' provided is invalid!';
271:
272: if (isset($valid)){
273: throw new IllegalArguementException($valid);
274: }else{
275: $this->year = $year;
276: $this->month = str_pad($month, 2, '0', STR_PAD_LEFT);
277: $this->day = str_pad($day, 2, '0', STR_PAD_LEFT);
278: $unixTime = mktime(0, 0, 0, $this->month, $this->day, $this->year);
279: $this->weekday=date('l', $unixTime);
280: }
281: }
282:
283: 284: 285: 286: 287: 288:
289: public function getTime() {
290: return $this->hour.':'.$this->minute.':'.$this->second;
291: }
292:
293: 294: 295: 296: 297: 298:
299: public function getYear() {
300: return $this->year;
301: }
302:
303: 304: 305: 306: 307: 308:
309: public function getMonth() {
310: return $this->month;
311: }
312:
313: 314: 315: 316: 317: 318:
319: public function getDay() {
320: return $this->day;
321: }
322:
323: 324: 325: 326: 327: 328:
329: public function getWeekday() {
330: return $this->weekday;
331: }
332:
333: 334: 335: 336: 337: 338:
339: public function getHour() {
340: return $this->hour;
341: }
342:
343: 344: 345: 346: 347: 348:
349: public function getMinute() {
350: return $this->minute;
351: }
352:
353: 354: 355: 356: 357: 358:
359: public function getSecond() {
360: return $this->second;
361: }
362:
363: 364: 365: 366: 367: 368: 369: 370: 371:
372: function setTime($hour, $minute, $second) {
373: $valid = null;
374:
375: if(!isset($valid) && !preg_match('/^[0-9]{2}$/', $hour) || !($hour >= 0 && $hour < 24))
376: $valid = 'The hour value '.$hour.' provided is invalid!';
377: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $minute) || !($minute >= 0 && $minute < 60))
378: $valid = 'The minute value '.$minute.' provided is invalid!';
379: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $second) || !($second >= 0 && $second < 60))
380: $valid = 'The second value '.$second.' provided is invalid!';
381:
382: if (isset($valid)) {
383: throw new IllegalArguementException($valid);
384: }else{
385: $this->hour = str_pad($hour, 2, '0', STR_PAD_LEFT);
386: $this->minute = str_pad($minute, 2, '0', STR_PAD_LEFT);
387: $this->second = str_pad($second, 2, '0', STR_PAD_LEFT);
388: }
389: }
390:
391: 392: 393: 394: 395: 396: 397:
398: public function populateFromString($dateTime) {
399: $valid = null;
400:
401: if($dateTime == 'Please select' || $dateTime == '0000-00-00 00:00:00') {
402: $this->year = '0000';
403: $this->month = '00';
404: $this->day = '00';
405: $this->hour = '00';
406: $this->minute = '00';
407: $this->second = '00';
408: }else{
409: $spilt_by_space = explode(" ", $dateTime);
410:
411: if(isset($spilt_by_space[0])) {
412: $date = $spilt_by_space[0];
413: }else{
414: throw new IllegalArguementException($this->helper);
415: }
416:
417: if(isset($spilt_by_space[1])) {
418: $time = $spilt_by_space[1];
419: }else{
420: throw new IllegalArguementException($this->helper);
421: }
422:
423: $split_by_dash = explode("-", $date);
424:
425: if(isset($split_by_dash[0])) {
426: $year = $split_by_dash[0];
427: }else{
428: throw new IllegalArguementException($this->helper);
429: }
430:
431: if(isset($split_by_dash[1])) {
432: $month = $split_by_dash[1];
433: }else{
434: throw new IllegalArguementException($this->helper);
435: }
436:
437: if(isset($split_by_dash[2])) {
438: $day = $split_by_dash[2];
439: }else{
440: throw new IllegalArguementException($this->helper);
441: }
442:
443: $split_by_colon = explode(":", $time);
444:
445: if(isset($split_by_colon[0])) {
446: $hour = $split_by_colon[0];
447: }else{
448: throw new IllegalArguementException($this->helper);
449: }
450:
451: if(isset($split_by_colon[1])) {
452: $minute = $split_by_colon[1];
453: }else{
454: throw new IllegalArguementException($this->helper);
455: }
456:
457: if(isset($split_by_colon[2])) {
458: $second = $split_by_colon[2];
459: }else{
460: throw new IllegalArguementException($this->helper);
461: }
462:
463: if(!preg_match('/^[0-9]{4}$/', $year))
464: $valid = 'The year value '.$year.' provided is invalid!';
465: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $month))
466: $valid = 'The month value '.$month.' provided is invalid!';
467: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $day))
468: $valid = 'The day value '.$day.' provided is invalid!';
469: if(!isset($valid) && !checkdate($month, $day, $year))
470: $valid = 'The day value '.$year.'/'.$month.'/'.$day.' provided is invalid!';
471: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $hour) || !($hour >= 0 && $hour < 24))
472: $valid = 'The hour value '.$hour.' provided is invalid!';
473: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $minute) || !($minute >= 0 && $minute < 60))
474: $valid = 'The minute value '.$minute.' provided is invalid!';
475: if(!isset($valid) && !preg_match('/^[0-9]{1,2}$/', $second) || !($second >= 0 && $second < 60))
476: $valid = 'The second value '.$second.' provided is invalid!';
477:
478: if (isset($valid)){
479: throw new IllegalArguementException($valid);
480: }else{
481: $this->year = $year;
482: $this->month = str_pad($month, 2, '0', STR_PAD_LEFT);
483: $this->day = str_pad($day, 2, '0', STR_PAD_LEFT);
484: $this->hour = str_pad($hour, 2, '0', STR_PAD_LEFT);
485: $this->minute = str_pad($minute, 2, '0', STR_PAD_LEFT);
486: $this->second = str_pad($second, 2, '0', STR_PAD_LEFT);
487: $unixTime = mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
488: $this->weekday=date('l', $unixTime);
489: }
490: }
491: }
492:
493: 494: 495: 496: 497: 498:
499: public function getRule() {
500: return $this->validationRule;
501: }
502:
503: 504: 505: 506: 507: 508:
509: public function setRule($rule) {
510: $this->validationRule = $rule;
511: }
512:
513: 514: 515: 516: 517: 518:
519: public function getHelper() {
520: return $this->helper;
521: }
522:
523: 524: 525: 526: 527: 528:
529: public function setHelper($helper) {
530: $this->helper = $helper;
531: }
532:
533: 534: 535: 536: 537: 538:
539: public function getTimeAway() {
540:
541: $periods = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year', 'decade');
542: $lengths = array('60', '60', '24', '7', '4.35', '12', '10');
543:
544: $now = time();
545: $unixTS = $this->getUnixValue();
546:
547: if($now > $unixTS) {
548: $difference = $now - $unixTS;
549: $tense = 'ago';
550: } else {
551: $difference = $unixTS - $now;
552: $tense = 'from now';
553: }
554:
555: for($i = 0; $difference >= $lengths[$i] && $i < count($lengths)-1; $i++) {
556: $difference /= $lengths[$i];
557: }
558:
559: $difference = round($difference);
560:
561: if($difference != 1) {
562: $periods[$i].= 's';
563: }
564:
565: return $difference.' '.$periods[$i].' '.$tense;
566: }
567: }
568:
569: ?>