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         if ( $blForceEnglishRet && strstr( $sDBDateIn, '-' ) ) {
00054             return $sDBDateIn;
00055         }
00056 
00057         if ( $sDBDateIn == '0000-00-00 00:00:00' || $sDBDateIn == '0000-00-00' ) {
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 ) ) {   // db timestamp : 20030322100409
00065             $sNew  = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00066             // check if it is a timestamp or wrong data: 20030322
00067             if ( strlen($sDBDateIn) > 8 ) {
00068                 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00069             }
00070             // convert it to english format
00071             $sDBDateIn = $sNew;
00072         }
00073 
00074         // remove time as it is same in english as in german
00075         $aData = split( ' ', trim( $sDBDateIn ) );
00076 
00077         // preparing time array
00078         $sTime = ( isset( $aData[1] ) && strstr( $aData[1], ':' ) )?$aData[1]:'';
00079         $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00080 
00081         // preparind date array
00082         $sDate = isset( $aData[0] )?$aData[0]:'';
00083         $aDate = split( '[/.-]', $sDate );
00084 
00085         // choosing format..
00086         if ( $sTime ) {
00087             $sFormat = $blForceEnglishRet ? 'Y-m-d H:i:s' : oxLang::getInstance()->translateString( 'fullDateFormat' );
00088         } else {
00089             $sFormat = $blForceEnglishRet ? 'Y-m-d' : oxLang::getInstance()->translateString( 'simpleDateFormat' );
00090         }
00091 
00092         if ( count( $aDate ) != 3 ) {
00093             return date( $sFormat );
00094         } else {
00095             return $this->_processDate( $aTime, $aDate, strstr( $sDate, '.' ), $sFormat );
00096         }
00097     }
00098 
00105     public function getTime()
00106     {
00107         $iServerTimeShift = $this->getConfig()->getConfigParam( 'iServerTimeShift' );
00108         if ( !$iServerTimeShift ) {
00109             return time();
00110         }
00111 
00112         return ( time() + ( (int) $iServerTimeShift * 3600 ) );
00113     }
00114 
00126     public function getWeekNumber( $iFirstWeekDay,  $sTimestamp = null, $sFormat = null )
00127     {
00128         if ( $sTimestamp == null ) {
00129             $sTimestamp = time();
00130         }
00131         if ( $sFormat == null ) {
00132             $sFormat = '%W';
00133             if ( $iFirstWeekDay ) {
00134                 $sFormat = '%U';
00135             }
00136         }
00137         return (int) strftime( $sFormat, $sTimestamp );
00138     }
00139 
00147     public function german2English( $sDate )
00148     {
00149         $aDate = explode( ".", $sDate);
00150 
00151         if ( isset( $aDate ) && count( $aDate) > 1) {
00152             if ( count( $aDate) == 2) {
00153                 $sDate = $aDate[1]."-".$aDate[0];
00154             } else {
00155                 $sDate = $aDate[2]."-".$aDate[1]."-".$aDate[0];
00156             }
00157         }
00158 
00159         return $sDate;
00160     }
00161 
00172     protected function _processDate( $aTime, $aDate, $blGerman, $sFormat )
00173     {
00174         if ( $blGerman ) {
00175             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[0], $aDate[2] ) );
00176         } else {
00177             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[2], $aDate[0] ) );
00178         }
00179     }
00180 
00181 }
00182 

Generated on Wed Apr 22 12:26:31 2009 for OXID eShop CE by  doxygen 1.5.5