00001 <?php
00002
00006 class oxUtilsDate extends oxSuperCfg
00007 {
00013 private static $_instance = null;
00014
00020 public static function getInstance()
00021 {
00022
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
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
00064 if ( is_numeric( $sDBDateIn ) ) {
00065 $sNew = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00066
00067 if ( strlen($sDBDateIn) > 8 ) {
00068 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00069 }
00070
00071 $sDBDateIn = $sNew;
00072 }
00073
00074
00075 $aData = split( ' ', trim( $sDBDateIn ) );
00076
00077
00078 $sTime = ( isset( $aData[1] ) && strstr( $aData[1], ':' ) )?$aData[1]:'';
00079 $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00080
00081
00082 $sDate = isset( $aData[0] )?$aData[0]:'';
00083 $aDate = split( '[/.-]', $sDate );
00084
00085
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