oxutilsdate.php

Go to the documentation of this file.
00001 <?php
00002 
00006 class oxUtilsDate extends oxSuperCfg
00007 {
00013     private static $_instance = null;
00014 
00022     public static function getInstance()
00023     {
00024         return oxRegistry::get("oxUtilsDate");
00025     }
00026 
00035     public function formatDBDate( $sDBDateIn, $blForceEnglishRet = false )
00036     {
00037         // convert english format to output format
00038         if ( !$sDBDateIn ) {
00039             return null;
00040         }
00041 
00042         $oStr = getStr();
00043         if ( $blForceEnglishRet && $oStr->strstr( $sDBDateIn, '-' ) ) {
00044             return $sDBDateIn;
00045         }
00046 
00047         if ( $this->isEmptyDate( $sDBDateIn ) && $sDBDateIn != '-' ) {
00048             return '-';
00049         } elseif ( $sDBDateIn == '-' ) {
00050             return '0000-00-00 00:00:00';
00051         }
00052 
00053         // is it a timestamp ?
00054         if ( is_numeric( $sDBDateIn ) ) {
00055             // db timestamp : 20030322100409
00056             $sNew  = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00057             // check if it is a timestamp or wrong data: 20030322
00058             if ( strlen($sDBDateIn) > 8 ) {
00059                 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00060             }
00061             // convert it to english format
00062             $sDBDateIn = $sNew;
00063         }
00064 
00065         // remove time as it is same in english as in german
00066         $aData = explode( ' ', trim( $sDBDateIn ) );
00067 
00068         // preparing time array
00069         $sTime = ( isset( $aData[1] ) && $oStr->strstr( $aData[1], ':' ) )?$aData[1]:'';
00070         $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00071 
00072         // preparind date array
00073         $sDate = isset( $aData[0] )?$aData[0]:'';
00074         $aDate = preg_split( '/[\/.-]/', $sDate );
00075 
00076         // choosing format..
00077         if ( $sTime ) {
00078             $sFormat = $blForceEnglishRet ? 'Y-m-d H:i:s' : oxRegistry::getLang()->translateString( 'fullDateFormat' );
00079         } else {
00080             $sFormat = $blForceEnglishRet ? 'Y-m-d' : oxRegistry::getLang()->translateString( 'simpleDateFormat' );
00081         }
00082 
00083         if ( count( $aDate ) != 3 ) {
00084             return date( $sFormat );
00085         } else {
00086             return $this->_processDate( $aTime, $aDate, $oStr->strstr( $sDate, '.' ), $sFormat );
00087         }
00088     }
00089 
00096     public function getTime()
00097     {
00098         $iServerTimeShift = $this->getConfig()->getConfigParam( 'iServerTimeShift' );
00099         if ( !$iServerTimeShift ) {
00100             return time();
00101         }
00102 
00103         return ( time() + ( (int) $iServerTimeShift * 3600 ) );
00104     }
00105 
00117     public function getWeekNumber( $iFirstWeekDay,  $sTimestamp = null, $sFormat = null )
00118     {
00119         if ( $sTimestamp == null ) {
00120             $sTimestamp = time();
00121         }
00122         if ( $sFormat == null ) {
00123             $sFormat = '%W';
00124             if ( $iFirstWeekDay ) {
00125                 $sFormat = '%U';
00126             }
00127         }
00128         return (int) strftime( $sFormat, $sTimestamp );
00129     }
00130 
00138     public function german2English( $sDate )
00139     {
00140         $aDate = explode( ".", $sDate);
00141 
00142         if ( isset( $aDate ) && count( $aDate) > 1) {
00143             if ( count( $aDate) == 2) {
00144                 $sDate = $aDate[1]."-".$aDate[0];
00145             } else {
00146                 $sDate = $aDate[2]."-".$aDate[1]."-".$aDate[0];
00147             }
00148         }
00149 
00150         return $sDate;
00151     }
00152 
00163     protected function _processDate( $aTime, $aDate, $blGerman, $sFormat )
00164     {
00165         if ( $blGerman ) {
00166             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[0], $aDate[2] ) );
00167         } else {
00168             return date( $sFormat, mktime( $aTime[0], $aTime[1], $aTime[2], $aDate[1], $aDate[2], $aDate[0] ) );
00169         }
00170     }
00171 
00180     public function isEmptyDate( $sDate )
00181     {
00182         $blIsEmpty = true;
00183 
00184         if ( !empty( $sDate ) ) {
00185             $sDate = preg_replace("/[^0-9a-z]/i", "", $sDate);
00186             if ( is_numeric( $sDate ) && $sDate == 0 ) {
00187                 $blIsEmpty = true;
00188             } else {
00189                 $blIsEmpty = false;
00190             }
00191         }
00192 
00193         return $blIsEmpty;
00194     }
00195 
00196 }
00197