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             static $inst = array();
00025             self::$_instance = $inst[oxClassCacheKey()];
00026         }
00027 
00028         if ( !self::$_instance instanceof oxUtilsDate ) {
00029             self::$_instance = oxNew( 'oxUtilsDate' );
00030 
00031             if ( defined( 'OXID_PHP_UNIT' ) ) {
00032                 $inst[oxClassCacheKey()] = self::$_instance;
00033             }
00034         }
00035         return self::$_instance;
00036     }
00037 
00046     public function formatDBDate( $sDBDateIn, $blForceEnglishRet = false )
00047     {
00048         // convert english format to output format
00049         if ( !$sDBDateIn ) {
00050             return null;
00051         }
00052 
00053         $oStr = getStr();
00054         if ( $blForceEnglishRet && $oStr->strstr( $sDBDateIn, '-' ) ) {
00055             return $sDBDateIn;
00056         }
00057 
00058         if ( $sDBDateIn == '0000-00-00 00:00:00' || $sDBDateIn == '0000-00-00' ) {
00059             return '-';
00060         } elseif ( $sDBDateIn == '-' ) {
00061             return '0000-00-00 00:00:00';
00062         }
00063 
00064         // is it a timestamp ?
00065         if ( is_numeric( $sDBDateIn ) ) {   // 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 = split( ' ', 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 = 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 
00182 }
00183 

Generated on Wed May 13 13:25:51 2009 for OXID eShop CE by  doxygen 1.5.5