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 $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
00065 if ( is_numeric( $sDBDateIn ) ) {
00066 $sNew = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00067
00068 if ( strlen($sDBDateIn) > 8 ) {
00069 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00070 }
00071
00072 $sDBDateIn = $sNew;
00073 }
00074
00075
00076 $aData = explode( ' ', trim( $sDBDateIn ) );
00077
00078
00079 $sTime = ( isset( $aData[1] ) && $oStr->strstr( $aData[1], ':' ) )?$aData[1]:'';
00080 $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00081
00082
00083 $sDate = isset( $aData[0] )?$aData[0]:'';
00084 $aDate = preg_split( '/[\/.-]/', $sDate );
00085
00086
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