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 self::$_instance = modInstances::getMod( __CLASS__ );
00025 }
00026
00027 if ( !self::$_instance instanceof oxUtilsDate ) {
00028 self::$_instance = oxNew( 'oxUtilsDate' );
00029
00030 if ( defined( 'OXID_PHP_UNIT' ) ) {
00031 modInstances::addMod( __CLASS__, self::$_instance);
00032 }
00033 }
00034 return self::$_instance;
00035 }
00036
00045 public function formatDBDate( $sDBDateIn, $blForceEnglishRet = false )
00046 {
00047
00048 if ( !$sDBDateIn ) {
00049 return null;
00050 }
00051
00052 $oStr = getStr();
00053 if ( $blForceEnglishRet && $oStr->strstr( $sDBDateIn, '-' ) ) {
00054 return $sDBDateIn;
00055 }
00056
00057 if ( $this->isEmptyDate( $sDBDateIn ) && $sDBDateIn != '-' ) {
00058 return '-';
00059 } elseif ( $sDBDateIn == '-' ) {
00060 return '0000-00-00 00:00:00';
00061 }
00062
00063
00064 if ( is_numeric( $sDBDateIn ) ) {
00065
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
00190 public function isEmptyDate( $sDate )
00191 {
00192 $blIsEmpty = true;
00193
00194 if ( !empty( $sDate ) ) {
00195 $sDate = preg_replace("/[^0-9a-z]/i", "", $sDate);
00196 if ( is_numeric( $sDate ) && $sDate == 0 ) {
00197 $blIsEmpty = true;
00198 } else {
00199 $blIsEmpty = false;
00200 }
00201 }
00202
00203 return $blIsEmpty;
00204 }
00205
00206 }
00207