* @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @link http://www.contenido.org * * {@internal * modified 2009-10-23, Murat Purc, removed deprecated function (PHP 5.3 ready) * * $Id$: * }} * */ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } /* The UNIX Timestamp is the amount of seconds passed since Jan 1 1970 00:00:00 GMT */ define("cDateTime_UNIX", 1); /* The ISO Date format is CCYY-MM-DD HH:mm:SS */ define("cDateTime_ISO", 2); /* The locale format, as specified in the Contenido backend */ define("cDateTime_Locale", 3); /* The locale format, as specified in the Contenido backend */ define("cDateTime_Locale_TimeOnly", 4); /* The locale format, as specified in the Contenido backend */ define("cDateTime_Locale_DateOnly", 5); /* The MySQL Timestamp is CCYYMMDDHHmmSS */ define("cDateTime_MySQL", 6); /* Custom format */ define("cDateTime_Custom", 99); define("cDateTime_Sunday", 0); define("cDateTime_Monday", 1); define("cDateTime_Tuesday", 2); define("cDateTime_Wednesday", 3); define("cDateTime_Thursday", 4); define("cDateTime_Friday", 5); define("cDateTime_Saturday", 6); class cDatatypeDateTime extends cDatatype { var $_iFirstDayOfWeek; /* This datatype stores its date format in ISO */ function __construct() { $this->setTargetFormat(cDateTime_Locale); $this->setSourceFormat(cDateTime_UNIX); $this->_iYear = 1970; $this->_iMonth = 1; $this->_iDay = 1; $this->_iHour = 0; $this->_iMinute = 0; $this->_iSecond = 0; $this->setFirstDayOfWeek(cDateTime_Monday); parent::__construct(); } function setCustomTargetFormat($targetFormat) { $this->_sCustomTargetFormat = $targetFormat; } function setCustomSourceFormat($sourceFormat) { $this->_sCustomSourceFormat = $sourceFormat; } function setSourceFormat($cSourceFormat) { $this->_cSourceFormat = $cSourceFormat; } function setTargetFormat($cTargetFormat) { $this->_cTargetFormat = $cTargetFormat; } function setYear($iYear) { $this->_iYear = $iYear; } function getYear() { return ($this->_iYear); } function setMonth($iMonth) { $this->_iMonth = $iMonth; } function getMonth() { return ($this->_iMonth); } function setDay($iDay) { $this->_iDay = $iDay; } function getDay() { return ($this->_iDay); } function getMonthName($iMonth) { switch ($iMonth) { case 1: return i18n("January"); case 2: return i18n("February"); case 3: return i18n("March"); case 4: return i18n("April"); case 5: return i18n("May"); case 6: return i18n("June"); case 7: return i18n("July"); case 8: return i18n("August"); case 9: return i18n("September"); case 10: return i18n("October"); case 11: return i18n("November"); case 12: return i18n("December"); } } function getDayName($iDayOfWeek) { switch ($iDayOfWeek) { case 0: return i18n("Sunday"); case 1: return i18n("Monday"); case 2: return i18n("Tuesday"); case 3: return i18n("Wednesday"); case 4: return i18n("Thursday"); case 5: return i18n("Friday"); case 6: return i18n("Saturday"); case 7: return i18n("Sunday"); default: return false; } } function getDayOrder() { $aDays = array(0, 1, 2, 3, 4, 5, 6); $aRemainderDays = array_splice($aDays, 0, $this->_iFirstDayOfWeek); $aReturnDays = array_merge($aDays, $aRemainderDays); return ($aReturnDays); } function getNumberOfMonthDays($iMonth = false, $iYear = false) { if ($iMonth === false) { $iMonth = $this->_iMonth; } if ($iYear === false) { $iYear = $this->_iYear; } return date("t", mktime(0, 0, 0, $iMonth, 1, $iYear)); } function setFirstDayOfWeek($iDay) { $this->_iFirstDayOfWeek = $iDay; } function getFirstDayOfWeek() { return $this->_iFirstDayOfWeek; } function getLeapDay() { return end($this->getDayOrder()); } function set($value, $iOverrideFormat = false) { if ($value == "") { return; } if ($iOverrideFormat !== false) { $iFormat = $iOverrideFormat; } else { $iFormat = $this->_cSourceFormat; } switch ($iFormat) { case cDateTime_UNIX: $sTemporaryTimestamp = $value; $this->_iYear = date("Y", $sTemporaryTimestamp); $this->_iMonth = date("m", $sTemporaryTimestamp); $this->_iDay = date("d", $sTemporaryTimestamp); $this->_iHour = date("H", $sTemporaryTimestamp); $this->_iMinute = date("i", $sTemporaryTimestamp); $this->_iSecond = date("s", $sTemporaryTimestamp); break; case cDateTime_ISO: $sTemporaryTimestamp = strtotime($value); $this->_iYear = date("Y", $sTemporaryTimestamp); $this->_iMonth = date("m", $sTemporaryTimestamp); $this->_iDay = date("d", $sTemporaryTimestamp); $this->_iHour = date("H", $sTemporaryTimestamp); $this->_iMinute = date("i", $sTemporaryTimestamp); $this->_iSecond = date("s", $sTemporaryTimestamp); break; case cDateTime_MySQL: $sTimeformat = 'YmdHis'; $targetFormat = str_replace('.', '\.', $sTimeformat); $targetFormat = str_replace('d', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('m', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('Y', '([0-9]{4,4})', $targetFormat); $targetFormat = str_replace('H', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('i', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('s', '([0-9]{2,2})', $targetFormat); /* Match the placeholders */ preg_match_all('/([a-zA-Z])/', $sTimeformat, $placeholderRegs); /* Match the date values */ preg_match('/' . $targetFormat . '/', $value, $dateRegs); $finalDate = array(); /* Map date entries to placeholders */ foreach ($placeholderRegs[0] as $key => $placeholderReg) { if (isset($dateRegs[$key])) { $finalDate[$placeholderReg] = $dateRegs[$key + 1]; } } /* Assign placeholders + data to the object's member variables */ foreach ($finalDate as $placeHolder => $value) { switch ($placeHolder) { case "d": $this->_iDay = $value; break; case "m": $this->_iMonth = $value; break; case "Y": $this->_iYear = $value; break; case "H": $this->_iHour = $value; break; case "i": $this->_iMinute = $value; break; case "s": $this->_iSecond = $value; break; default: break; } } break; case cDateTime_Custom: /* Build a regular expression */ $sourceFormat = str_replace('.', '\.', $this->_sCustomSourceFormat); $sourceFormat = str_replace('%d', '([0-9]{2,2})', $sourceFormat); $sourceFormat = str_replace('%m', '([0-9]{2,2})', $sourceFormat); $sourceFormat = str_replace('%Y', '([0-9]{4,4})', $sourceFormat); /* Match the placeholders */ preg_match_all('/(%[a-zA-Z])/', $this->_sCustomSourceFormat, $placeholderRegs); /* Match the date values */ preg_match('/' . $sourceFormat . '/', $value, $dateRegs); $finalDate = array(); /* Map date entries to placeholders */ foreach ($placeholderRegs[0] as $key => $placeholderReg) { if (isset($dateRegs[$key])) { $finalDate[$placeholderReg] = $dateRegs[$key + 1]; } } /* Assign placeholders + data to the object's member variables */ foreach ($finalDate as $placeHolder => $value) { switch ($placeHolder) { case "%d": $this->_iDay = $value; break; case "%m": $this->_iMonth = $value; break; case "%Y": $this->_iYear = $value; break; default: break; } } break; default: break; } } function get($iOverrideFormat = false) { if ($iOverrideFormat !== false) { $iFormat = $iOverrideFormat; } else { $iFormat = $this->_cSourceFormat; } switch ($iFormat) { case cDateTime_ISO: $sTemporaryTimestamp = mktime($this->_iHour, $this->_iMinute, $this->_iSecond, $this->_iMonth, $this->_iDay, $this->_iYear); return date("Y-m-d H:i:s", $sTemporaryTimestamp); break; case cDateTime_UNIX: $sTemporaryTimestamp = mktime($this->_iHour, $this->_iMinute, $this->_iSecond, $this->_iMonth, $this->_iDay, $this->_iYear); return ($sTemporaryTimestamp); break; case cDateTime_Custom: return strftime($this->_sCustomSourceFormat, mktime($this->_iHour, $this->_iMinute, $this->_iSecond, $this->_iMonth, $this->_iDay, $this->_iYear)); break; case cDateTime_MySQL: $sTemporaryTimestamp = mktime($this->_iHour, $this->_iMinute, $this->_iSecond, $this->_iMonth, $this->_iDay, $this->_iYear); return date("YmdHis", $sTemporaryTimestamp); break; default: cError(__FILE__, __LINE__, "Not supported yet"); break; } } function render($iOverrideFormat = false) { if ($iOverrideFormat !== false) { $iFormat = $iOverrideFormat; } else { $iFormat = $this->_cTargetFormat; } switch ($iFormat) { case cDateTime_Locale_TimeOnly: $sTimeformat = getEffectiveSetting("backend", "timeformat_time", "H:i:s"); return date($sTimeformat, mktime($this->_iHour, $this->_iMinute, $this->iSecond, $this->_iMonth, $this->_iDay, $this->_iYear)); case cDateTime_Locale_DateOnly: $sTimeformat = getEffectiveSetting("backend", "timeformat_date", "Y-m-d"); return date($sTimeformat, mktime($this->_iHour, $this->_iMinute, $this->iSecond, $this->_iMonth, $this->_iDay, $this->_iYear)); case cDateTime_Locale: $sTimeformat = getEffectiveSetting("backend", "timeformat", "Y-m-d H:i:s"); return date($sTimeformat, mktime($this->_iHour, $this->_iMinute, $this->iSecond, $this->_iMonth, $this->_iDay, $this->_iYear)); case cDateTime_Custom: return strftime($this->_sCustomTargetFormat, mktime($this->_iHour, $this->_iMinute, $this->_iSecond, $this->_iMonth, $this->_iDay, $this->_iYear)); break; } } function parse($value) { if ($value == "") { return; } switch ($this->_cTargetFormat) { case cDateTime_ISO: $sTemporaryTimestamp = strtotime($value); $this->_iYear = date("Y", $sTemporaryTimestamp); $this->_iMonth = date("m", $sTemporaryTimestamp); $this->_iDay = date("d", $sTemporaryTimestamp); $this->_iHour = date("H", $sTemporaryTimestamp); $this->_iMinute = date("i", $sTemporaryTimestamp); $this->_iSecond = date("s", $sTemporaryTimestamp); break; case cDateTime_Locale_DateOnly: $sTimeformat = getEffectiveSetting('backend', 'timeformat_date', 'Y-m-d'); $targetFormat = str_replace('.', '\.', $sTimeformat); $targetFormat = str_replace('d', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('m', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('Y', '([0-9]{4,4})', $targetFormat); /* Match the placeholders */ preg_match_all('/([a-zA-Z])/', $sTimeformat, $placeholderRegs); /* Match the date values */ preg_match('/' . $targetFormat . '/', $value, $dateRegs); $finalDate = array(); /* Map date entries to placeholders */ foreach ($placeholderRegs[0] as $key => $placeholderReg) { if (isset($dateRegs[$key])) { $finalDate[$placeholderReg] = $dateRegs[$key + 1]; } } /* Assign placeholders + data to the object's member variables */ foreach ($finalDate as $placeHolder => $value) { switch ($placeHolder) { case "d": $this->_iDay = $value; break; case "m": $this->_iMonth = $value; break; case "Y": $this->_iYear = $value; break; default: break; } } break; case cDateTime_Locale: $sTimeformat = getEffectiveSetting('backend', 'timeformat', 'Y-m-d H:i:s'); $targetFormat = str_replace('.', '\.', $sTimeformat); $targetFormat = str_replace('d', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('m', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('Y', '([0-9]{4,4})', $targetFormat); /* Match the placeholders */ preg_match_all('/(%[a-zA-Z])/', $this->_sCustomTargetFormat, $placeholderRegs); /* Match the date values */ preg_match('/' . $targetFormat . '/', $value, $dateRegs); $finalDate = array(); /* Map date entries to placeholders */ foreach ($placeholderRegs[0] as $key => $placeholderReg) { if (isset($dateRegs[$key])) { $finalDate[$placeholderReg] = $dateRegs[$key + 1]; } } /* Assign placeholders + data to the object's member variables */ foreach ($finalDate as $placeHolder => $value) { switch ($placeHolder) { case "%d": $this->_iDay = $value; break; case "%m": $this->_iMonth = $value; break; case "%Y": $this->_iYear = $value; break; default: break; } } break; case cDateTime_Custom: /* Build a regular expression */ $targetFormat = str_replace('.', '\.', $this->_sCustomTargetFormat); $targetFormat = str_replace('%d', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('%m', '([0-9]{2,2})', $targetFormat); $targetFormat = str_replace('%Y', '([0-9]{4,4})', $targetFormat); /* Match the placeholders */ preg_match_all('/(%[a-zA-Z])/', $this->_sCustomTargetFormat, $placeholderRegs); /* Match the date values */ preg_match('/' . $targetFormat . '/', $value, $dateRegs); $finalDate = array(); /* Map date entries to placeholders */ foreach ($placeholderRegs[0] as $key => $placeholderReg) { if (isset($dateRegs[$key])) { $finalDate[$placeholderReg] = $dateRegs[$key + 1]; } } /* Assign placeholders + data to the object's member variables */ foreach ($finalDate as $placeHolder => $value) { switch ($placeHolder) { case "%d": $this->_iDay = $value; break; case "%m": $this->_iMonth = $value; break; case "%Y": $this->_iYear = $value; break; default: break; } } break; default: break; } } } ?>