. * * PHP versions 4 and 5 * * LICENSE: * * Copyright (c) 1997-2007, Paul M. Jones * David C. Morse * Mark Wiesemann * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The names of the authors may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @category Database * @package DB_Table * @author Baba Buehler * @author Pierre-Alain Joye * @license http://opensource.org/licenses/bsd-license.php New BSD License * @version CVS: $Id: Date.php,v 1.3 2007/12/13 16:52:14 wiesemann Exp $ * @link http://pear.php.net/package/DB_Table */ /** * Generic date handling class for DB_Table. * * @category Database * @package DB_Table * @author Baba Buehler * @author Pierre-Alain Joye * @version Release: 1.5.6 * @link http://pear.php.net/package/DB_Table */ class DB_Table_Date { /** * the year * @var int */ var $year; /** * the month * @var int */ var $month; /** * the day * @var int */ var $day; /** * the hour * @var int */ var $hour; /** * the minute * @var int */ var $minute; /** * the second * @var int */ var $second; /** * the parts of a second * @var float */ var $partsecond; /** * Constructor * * Creates a new DB_Table_Date Object. The date should be near to * ISO 8601 format. * * @access public * @param string $date A date in ISO 8601 format. */ function __construct($date) { // This regex is very loose and accepts almost any butchered // format you could throw at it. e.g. 2003-10-07 19:45:15 and // 2003-10071945:15 are the same thing in the eyes of this // regex, even though the latter is not a valid ISO 8601 date. preg_match('/^(\d{4})-?(\d{2})-?(\d{2})([T\s]?(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|[\+\-]\d{2}:?\d{2})?)?$/i', $date, $regs); $this->year = $regs[1]; $this->month = $regs[2]; $this->day = $regs[3]; $this->hour = isset($regs[5])?$regs[5]:0; $this->minute = isset($regs[6])?$regs[6]:0; $this->second = isset($regs[7])?$regs[7]:0; $this->partsecond = isset($regs[8])?(float)$regs[8]:(float)0; // if an offset is defined, convert time to UTC // Date currently can't set a timezone only by offset, // so it has to store it as UTC if (isset($regs[9])) { $this->toUTCbyOffset($regs[9]); } } /** * Date pretty printing, similar to strftime() * * Formats the date in the given format, much like * strftime(). Most strftime() options are supported.

* * formatting options:

* * %Y year as decimal including century (range 0000 to 9999)
* %m month as decimal number (range 01 to 12)
* %d day of month (range 00 to 31)
* %H hour as decimal number (00 to 23)
* %M minute as a decimal number (00 to 59)
* %S seconds as a decimal number (00 to 59)
* %% literal '%'
*
* * @access public * @param string format the format string for returned date/time * @return string date/time in given format */ function format($format) { $output = ""; for($strpos = 0; $strpos < strlen($format); $strpos++) { $char = substr($format,$strpos,1); if ($char == "%") { $nextchar = substr($format,$strpos + 1,1); switch ($nextchar) { case "Y": $output .= $this->year; break; case "m": $output .= sprintf("%02d",$this->month); break; case "d": $output .= sprintf("%02d",$this->day); break; case "H": $output .= sprintf("%02d", $this->hour); break; case "M": $output .= sprintf("%02d",$this->minute); break; case "S": $output .= sprintf("%02d", $this->second); break; default: $output .= $char.$nextchar; } $strpos++; } else { $output .= $char; } } return $output; } } ?>