# Timestamp.class.php

Go to the documentation of this file.

    00001 <?php
    00002 /***************************************************************************
    00003  *   Copyright (C) 2004-2009 by Garmonbozia Research Group,                *
    00004  *   Anton E. Lebedevich, Konstantin V. Arkhipov                           *
    00005  *                                                                         *
    00006  *   This program is free software; you can redistribute it and/or modify  *
    00007  *   it under the terms of the GNU Lesser General Public License as        *
    00008  *   published by the Free Software Foundation; either version 3 of the    *
    00009  *   License, or (at your option) any later version.                       *
    00010  *                                                                         *
    00011  ***************************************************************************/
    00012 /* $Id$ */
    00013
    00021     class Timestamp extends Date
    00022     {
    00023         private $hour       = null;
    00024         private $minute     = null;
    00025         private $second     = null;
    00026
    00030         public static function create($timestamp)
    00031         {
    00032             return new self($timestamp);
    00033         }
    00034
    00035         public static function now()
    00036         {
    00037             return date(self::getFormat());
    00038         }
    00039
    00043         public static function makeNow()
    00044         {
    00045             return new self(time());
    00046         }
    00047
    00051         public static function makeToday()
    00052         {
    00053             return new self(self::today());
    00054         }
    00055
    00056         public function toTime($timeDelimiter = ':', $secondDelimiter = '.')
    00057         {
    00058             return
    00059                 $this->hour
    00060                 .$timeDelimiter
    00061                 .$this->minute
    00062                 .$secondDelimiter
    00063                 .$this->second;
    00064         }
    00065
    00066         public function toDateTime(
    00067             $dateDelimiter = '-',
    00068             $timeDelimiter = ':',
    00069             $secondDelimiter = '.'
    00070         )
    00071         {
    00072             return
    00073                 $this->toDate($dateDelimiter).' '
    00074                 .$this->toTime($timeDelimiter, $secondDelimiter);
    00075         }
    00076
    00077         public function getHour()
    00078         {
    00079             return $this->hour;
    00080         }
    00081
    00082         public function getMinute()
    00083         {
    00084             return $this->minute;
    00085         }
    00086
    00087         public function getSecond()
    00088         {
    00089             return $this->second;
    00090         }
    00091
    00092         public function equals(Timestamp $timestamp)
    00093         {
    00094             return ($this->toDateTime() === $timestamp->toDateTime());
    00095         }
    00096
    00097         public function getDayStartStamp()
    00098         {
    00099             if (!$this->hour && !$this->minute && !$this->second)
    00100                 return $this->int;
    00101             else
    00102                 return parent::getDayStartStamp();
    00103         }
    00104
    00105         public function getHourStartStamp()
    00106         {
    00107             if (!$this->minute && !$this->second)
    00108                 return $this->int;
    00109
    00110             return
    00111                 mktime(
    00112                     $this->hour,
    00113                     0,
    00114                     0,
    00115                     $this->month,
    00116                     $this->day,
    00117                     $this->year
    00118                 );
    00119         }
    00120
    00124         public function toIsoString($convertToUtc = true)
    00125         {
    00126             if ($convertToUtc)
    00127                 return date('Y-m-d\TH:i:s\Z', $this->int - date('Z', $this->int));
    00128             else
    00129                 return date('Y-m-d\TH:i:sO', $this->int);
    00130         }
    00131
    00135         public function toTimestamp()
    00136         {
    00137             return $this;
    00138         }
    00139
    00140         protected static function getFormat()
    00141         {
    00142             return 'Y-m-d H:i:s';
    00143         }
    00144
    00145         /* void */ protected function import($string)
    00146         {
    00147             list($date, $time) = explode(' ', $string, 2);
    00148
    00149             list($this->hour, $this->minute, $this->second) =
    00150                 explode(':', $time, 3);
    00151
    00152             $time =
    00153                 sprintf(
    00154                     '%02d:%02d:%02d',
    00155                     $this->hour,
    00156                     $this->minute,
    00157                     $this->second
    00158                 );
    00159
    00160             list($this->hour, $this->minute, $this->second) =
    00161                 explode(':', $time, 3);
    00162
    00163             parent::import($date);
    00164
    00165             $this->string .= ' '.$time;
    00166         }
    00167
    00168         /* void */ protected function stringImport($string)
    00169         {
    00170             $matches = array();
    00171
    00172             if (
    00173                 preg_match(
    00174                     '/^(\d{1,4})-(\d{1,2})-(\d{1,2})\s\d{1,2}:\d{1,2}:\d{1,2}$/',
    00175                     $string,
    00176                     $matches
    00177                 )
    00178             ) {
    00179                 if (checkdate($matches[2], $matches[3], $matches[1]))
    00180                     $this->string = $string;
    00181             } elseif (
    00182                 preg_match(
    00183                     '/^(\d{1,4})-(\d{1,2})-(\d{1,2})$/',
    00184                     $string,
    00185                     $matches
    00186                 )
    00187             ) {
    00188                 if (checkdate($matches[2], $matches[3], $matches[1]))
    00189                     $this->string = $string . ' 00:00:00';
    00190             } elseif (($stamp = strtotime($string)) !== false)
    00191                 $this->string = date($this->getFormat(), $stamp);
    00192         }
    00193
    00194         /* void */ protected function buildInteger()
    00195         {
    00196             $this->int =
    00197                 mktime(
    00198                     $this->hour,
    00199                     $this->minute,
    00200                     $this->second,
    00201                     $this->month,
    00202                     $this->day,
    00203                     $this->year
    00204                 );
    00205         }
    00206     }
    00207 ?>