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
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
00054 if ( is_numeric( $sDBDateIn ) ) {
00055
00056 $sNew = substr( $sDBDateIn, 0, 4 ).'-'.substr( $sDBDateIn, 4, 2 ).'-'.substr( $sDBDateIn, 6, 2 ).' ';
00057
00058 if ( strlen($sDBDateIn) > 8 ) {
00059 $sNew .= substr( $sDBDateIn, 8, 2 ).':'.substr( $sDBDateIn, 10, 2 ).':'.substr( $sDBDateIn, 12, 2 );
00060 }
00061
00062 $sDBDateIn = $sNew;
00063 }
00064
00065
00066 $aData = explode( ' ', trim( $sDBDateIn ) );
00067
00068
00069 $sTime = ( isset( $aData[1] ) && $oStr->strstr( $aData[1], ':' ) )?$aData[1]:'';
00070 $aTime = $sTime?explode( ':', $sTime ):array( 0, 0, 0 );
00071
00072
00073 $sDate = isset( $aData[0] )?$aData[0]:'';
00074 $aDate = preg_split( '/[\/.-]/', $sDate );
00075
00076
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