oxutilsdate.php

Go to the documentation of this file.
00001 <?php
00002 
00006 class oxUtilsDate extends oxSuperCfg
00007 {
00013     private static $_instance = null;
00014 
00020     public static function getInstance()
00021     {
00022         // disable caching for test modules
00023         if ( defined( 'OXID_PHP_UNIT' ) ) {
00024             self::$_instance = modInstances::getMod( __CLASS__ );
00025         }
00026 
00027         if ( !self::$_instance instanceof oxUtilsDate ) {
00028             self::$_instance = oxNew( 'oxUtilsDate' );
00029 
00030             if ( defined( 'OXID_PHP_UNIT' ) ) {
00031                 modInstances::addMod( __CLASS__, self::$_instance);
00032             }
00033         }
00034         return self::$_instance;
00035     }
00036 
00045     public function formatDBDate( $sDBDateIn, $blForceEnglishRet = false )
00046     {
00047         // convert english format to output format
00048         if ( !$sDBDateIn ) {
00049             return null;
00050         }
00051 
00052         $oStr = getStr();
00053         if ( $blForceEnglishRet && $oStr->strstr( $sDBDateIn, '-' ) ) {
00054             return $sDBDateIn;
00055         }
00056 
00057         if ( $this->isEmptyDate( $sDBDateIn ) && $sDBDateIn != '-' ) {
00058             return '-';
00059         } elseif ( $sDBDateIn == '-' ) {
00060             return '0000-00-00 00:00:00';
00061         }
00062 
00063         // is it a timestamp ?
00064         if ( is_numeric( $sDBDateIn ) ) {
00065             // db timestamp : 20030322100409
00066             $sNew  = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00067             // check if it is a timestamp or wrong data: 20030322
00068             if ( strlen($sDBDateIn) > 8 ) {
00069                 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00070             }
00071             // convert it to english format
00072             $sDBDateIn = $sNew;
00073         }
00074 
00075         // remove time as it is same in english as in german
00076         $aData = explode( ' ', trim( $sDBDateIn ) );
00077 
00078         // preparing time array
00079         $sTime = ( isset( $aData[1] ) && $oStr->strstr( $aData[1], ':' ) )?$aData[1]:'';
00080         $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00081 
00082         // preparind date array
00083         $sDate = isset( $aData[0] )?$aData[0]:'';
00084         $aDate = preg_split( '/[\/.-]/', $sDate );
00085 
00086         // choosing format..
00087         if ( $sTime ) {
00088             $sFormat = $blForceEnglishRet ? 'Y-m-d H:i:s' : oxLang::getInstance()->translateString( 'fullDateFormat' );
00089         } else {
00090             $sFormat = $blForceEnglishRet ? 'Y-m-d' : oxLang::getInstance()->translateString( 'simpleDateFormat' );
00091         }
00092 
00093         if ( count( $aDate ) != 3 ) {
00094             return date( $sFormat );
00095         } else {
00096             return $this->_processDate( $aTime, $aDate, $oStr->strstr( $sDate, '.' ), $sFormat );
00097         }
00098     }
00099 
00106     public function getTime()
00107     {
00108         $iServerTimeShift = $this->getConfig()->getConfigParam( 'iServerTimeShift' );
00109         if ( !$iServerTimeShift ) {
00110             return time();
00111         }
00112 
00113         return ( time() + ( (int) $iServerTimeShift * 3600 ) );
00114     }
00115 
00127     public function getWeekNumber( $iFirstWeekDay,  $sTimestamp = null, $sFormat = null )
00128     {
00129         if ( $sTimestamp == null ) {
00130             $sTimestamp = time();
00131         }
00132         if ( $sFormat == null ) {
00133             $sFormat = '%W';
00134             if ( $iFirstWeekDay ) {
00135                 $sFormat = '%U';
00136             }
00137         }
00138         return (int) strftime( $sFormat, $sTimestamp );
00139     }
00140 
00148     public function german2English( $sDate )
00149     {
00150         $aDate = explode( ".", $sDate);
00151 
00152         if ( isset( $aDate ) && count( $aDate) > 1) {
00153             if ( count( $aDate) == 2) {
00154                 $sDate = $aDate[1]."-".$aDate[0];
00155             } else {
00156                 $sDate = $aDate[2]."-".$aDate[1]."-".$aDate[0];
00157             }
00158         }
00159 
00160         return $sDate;
00161     }
00162 
00173     protected function _processDate( $aTime, $aDate, $blGerman, $sFormat )
00174     {
00175         if ( $blGerman ) {
00176             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[0], $aDate[2] ) );
00177         } else {
00178             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[2], $aDate[0] ) );
00179         }
00180     }
00181 
00190     public function isEmptyDate( $sDate )
00191     {
00192         $blIsEmpty = true;
00193 
00194         if ( !empty( $sDate ) ) {
00195             $sDate = preg_replace("/[^0-9a-z]/i", "", $sDate);
00196             if ( is_numeric( $sDate ) && $sDate == 0 ) {
00197                 $blIsEmpty = true;
00198             } else {
00199                 $blIsEmpty = false;
00200             }
00201         }
00202 
00203         return $blIsEmpty;
00204     }
00205 
00206 }
00207