Конвертор даты

Статус
В этой теме нельзя размещать новые ответы.
нужны исходники скриптов которые в ядре PHP 5.2 где их взять?

тк там есть вот это!
DateTime::format (PHP 5 >= 5.2.0)


все супер лучше чем хотелось бы но хочу сырцы, тк на серваке PHP 5.0 и поднимать версию никто не будет!
Код:
$datetime = date_create('1876-08-03 14:52:10');

echo date_format($datetime, 'jS, F Y') . "\n";
echo $datetime->format('jS, F Y') . "\n";


ОПИСАНИЕ для ВСЕХ!!!! кто искал и не нашел))

В PHP5.2 для работы с датой/временем появились классы DateTime и DateTimeZone. Вначале на них не обратил внимание, так как привык пользоваться функциями date(), etc. Но потом решил все-таки посмотреть какие возможности реализуют новые классы.

DateTime

Конструктор класса

DateTime DateTime::__construct ([ string $time [, DateTimeZone $timezone ]] )

Конструктор принимает два параметра:
1. Строка в формате принимаемым strtotime(), по умолчанию — "now".
2. Зона для которой будем считать время.

Метод format

string DateTime::format ( string $format )

Возвращает дату в соответствии с указанным форматом.
Аналогично функции date()

Метод modify

void DateTime::modify ( string $modify )

Функция для изменения текущего времени.
Принимает один параметр — строка в формате, принимаемом strtotime()
Например, нужно получить дату, которая будет через неделю:
$date = new DateTime();
echo $date->format( "Y-m-d" ); //2008-07-16
$date->modify( '+1 week' );
echo $date->format( "Y-m-d" ); //2008-07-23

Реализация на php4 была бы такой:
echo date( 'Y-m-d' ); //2008-07-16
echo date( 'Y-m-d', time() + ( 7*24*3600 ) );//2008-07-23

Согласитесь, удобнее...

Метод getOffset

int DateTime::getOffset ( void )

Возвращает различие в секундах между UTC и текущим часовым поясом
$tz = new DateTimeZone( "Etc/GMT+2" );
$time = new DateTime();
$time->setTimezone( $tz );
echo $time->getOffset();//7200


Метод getTimezone

DateTimeZone DateTime::getTimezone ( void )

Возвращает DateTimeZone относящийся к DateTime, или false в случае неудачи

Метод setTimezone

void DateTime::setTimezone ( DateTimeZone $timezone )

Устанавливаем DateTimeZone

Метод setTime

void DateTime::setTime ( int $hour , int $minute [, int $second ] )
Устанавливаем текущее время

Метод setDate

void DateTime::setDate ( int $year , int $month , int $day )

Устанавливаем текущую дату

Метод setISODate

void DateTime::setISODate ( int $year , int $week [, int $day ] )

Устанавливаем текущую iso дату
 
ТЕМУ ПРОШУ ЗАКРЫТЬ

!!!ТЕМУ ПРОШУ ЗАКРЫТЬ!!!

и так после долгих мучений родился класс, совместимости с версиями 4.3 и выше!!!!

переменные даты
PHP:
DEFINE('DATEFORMAT',    'd F Y H:i'); // представление даты
DEFINE('_MONDAY','Понедельник'); DEFINE('_TUESDAY','Вторник'); DEFINE('_WEDNESDAY','Среда'); DEFINE('_THURSDAY','Четверг'); DEFINE('_FRIDAY','Пятница'); DEFINE('_SATURDAY','Суббота'); DEFINE('_SUNDAY','Воскресенье');
DEFINE('_MON','пн'); DEFINE('_TUE','вт'); DEFINE('_WED','ср'); DEFINE('_THU','чт'); DEFINE('_FRI','пт'); DEFINE('_SAT','сб'); DEFINE('_SUN','вс');
DEFINE('_JANUARY','января'); DEFINE('_FEBRUARY','февраля'); DEFINE('_MARCH','марта'); DEFINE('_APRIL','апреля'); DEFINE('_MAY','мая'); DEFINE('_JUNE','июня'); DEFINE('_JULY','июля'); DEFINE('_AUGUST','августа'); DEFINE('_SEPTEMBER','сентября'); DEFINE('_OCTOBER','октября'); DEFINE('_NOVEMBER','ноября'); DEFINE('_DECEMBER','декабря');

Основные функции класса
PHP:
/**
* Локализация даты
* @param mixed дата (в любом из понимаемых видов которые парсятся в ParseDate)
* @param mixed формат даты если необходимо или нужно изменить
* @return mixed
*/
function dateformat($date,$dateformat=DATEFORMAT)
{
$this->parsedate($date);
for($i=0; $i<strlen($dateformat); $i++):
  $symbol=substr($dateformat,$i,1);
  $match=null;
  switch($symbol):
    case "d": //d День месяца, 2 цифры с ведущими нулями от 01 до 31
      $match=str_pad($date["D"], 2, "0", STR_PAD_LEFT);
      break;
    case "j": //j День месяца без ведущих нулей От 1 до 31
      $match=intVal($date["D"]);
      break;

    case "m": //m Порядковый номер месяца с ведущими нулями От 01 до 12
      $match=str_pad($date["M"], 2, "0", STR_PAD_LEFT);
      break;
    case "n": //n Порядковый номер месяца без ведущих нулей От 1 до 12
      $match=intVal($date["M"]);
      break;
    case "F": //F Полное наименование месяца, например January или March от January до December
      $fullmonths=array(_JANUARY,_FEBRUARY,_MARCH,_APRIL,_MAY,_JUNE,_JULY,_AUGUST,_SEPTEMBER,_OCTOBER,_NOVEMBER,_DECEMBER);
      $match=str_pad($date["M"], 2, "0", STR_PAD_LEFT);
      if(intVal($date["M"]) > 0):
        $match=$fullmonths[intVal($date["M"])-1];
      endif;
      break;
    case "M": //M Сокращенное наименование месяца, 3 символа От Jan до Dec
      $shortmonths(_JAN,_FEB,_MAR,_APR,_MAY,_JUN,_JUL,_AUG,_SEP,_OCT,_NOV,_DEC);
      $match=str_pad($date["M"], 2, "0", STR_PAD_LEFT);
      if(intVal($date["M"]) > 0):
        $match=$shortmonths[intVal($date["M"])-1];
      endif;
      break;

    case "Y": //Y Порядковый номер года, 4 цифры Примеры: 1999, 2003
      $match=str_pad($date["Y"], 4, "0", STR_PAD_LEFT);
      break;
    case "y": //y Номер года, 2 цифры Примеры: 99, 03
      $match=substr($date["Y"], 2);
      break;

    case "H": //H Часы в 24-часовом формате с ведущими нулями От 00 до 23
      $match=str_pad($date["H"], 2, "0", STR_PAD_LEFT);
      break;
    case "h": //h Часы в 12-часовом формате с ведущими нулями От 01 до 12
      $match=str_pad($date["H"], 2, "0", STR_PAD_LEFT);
      if($match > 12) $match = $match-12;
      break;
    case "G": //G Часы в 24-часовом формате без ведущих нулей От 0 до 23
      $match=intVal($date["H"]);
      break;
    case "g": //g Часы в 12-часовом формате без ведущих нулей От 1 до 12
      $match=intVal($date["H"]);
      if($match > 12):
       $match = $match-12;
      endif;
      break;

    case "i": //i Минуты с ведущими нулями 00 to 59
      $match=str_pad($date["I"], 2, "0", STR_PAD_LEFT);
      break;

    case "s": //s Секунды с ведущими нулями От 00 до 59
      $match=str_pad($date["S"], 2, "0", STR_PAD_LEFT);
      break;

    case "w": //w Порядковый номер дня недели От 0 (Sunday) до 6 (Saturday)
      $match=date("w", $this->timestamp($date));
      break;
    case "l": //l (строчная 'L') Полное наименование дня недели От Sunday до Saturday
      $fullweekdays=array(_SUNDAY,_MONDAY,_TUESDAY,_WEDNESDAY,_THURSDAY,_FRIDAY,_SATURDAY);
      $match=date("w", $this->timestamp($date));
      if(intVal($match) >= 0):
        $match=$fullweekdays[intVal($match)];
      endif;
      break;
    case "D": //D Сокращенное наименование дня недели, 3 символа от Mon до Sun
      $shortweekdays=array(_SUN,_MON,_TUE,_WED,_THU,_FRI,_SAT);
      $match=date("w", $this->timestamp($date));
      if(intVal($match) >= 0):
        $match=$shortweekdays[intVal($match)];
      endif;
      break;

    case "a": //a Ante meridiem или Post meridiem в нижнем регистре am или pm
    case "A": //A Ante meridiem или Post meridiem в верхнем регистре AM или PM
      $match=intVal($date["H"]);
      if($match > 12):
        $match = ($match-12)." PM";
      else: $match .= " AM";
        if(substr($dateformat, $i ,1) == "a"):
          $match=strToLower($match);
        endif;
      endif;
      break;
    case "U": //U Количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970, 00:00:00 GMT)
      $match=$this->timestamp($date);
      break;

    default: $match = substr($dateformat, $i ,1);
      break;
  endswitch;
  $result.=$match;
endfor;
unset($i);
unset($match);
unset($symbol);
unset($fullmonths);
unset($shortmonths);
unset($fullweekdays);
unset($shortweekdays);

$date=$result;
unset($result);
return $date;
}

function date(&$date,$separator='-',$index=array('Y','M','D'))
{
$date=trim($date);
$values=explode($separator,$date);
$values[0]=intval($values[0]);
$values[1]=intval($values[1]);
$values[2]=intval($values[2]);
$date=null;
$date=array();
if(phpversion() <= '5.1.0'):
  foreach($values as $key=>$value):
    $date[$index[$key]]=$values[$key];
  endforeach;
else:
  $date=array_combine($index,$values);
endif;
return $date;
}

function time(&$time,$separator=':')
{
$time=trim($time);
list($hour,$min,$sec)=explode($separator,$time);
$hour=intval($hour);
$min=intval($min);
$sec=intval($sec);
$time=array('H'=>$hour,'I'=>$min,'S'=>$sec);
return $time;
}

function datetime(&$datetime)
{
list($date,$time)=explode(" ",$datetime);
$this->date($date,'-',array('Y','M','D'));
$this->time($time,':');
$datetime=array_merge($date,$time);
return $datetime;
}

function timestamp(&$date)
{
if(!checkdate($date['M'],$date['D'],$date['Y'])):
  return false;
endif;
if($date['H']>24 || $date['H']<0 || $date['I']<0 || $date['I']>59 || $date['S']<0 || $date['S']>59):
  return false;
endif;
$date=mktime($date['H'],$date['I'],$date['S'],$date['M'],$date['D'],$date['Y']);
if($date <= 0):
  return false;
endif;
return $date;
}

function parsedate(&$value)
{
//2009-05-20 13:10:55
if(preg_match('/\d{4}\-\d{2}\-\d{2}\s{1}\d{2}\:\d{2}\:\d{2}/',$value)):
  $this->datetime($value);
endif;
//2009-05-20
if(preg_match('/\d{4}\-\d{2}\-\d{2}/',$value)):
  $this->date($value,'-',array('Y','M','D'));
endif;
//05/20/2009
if(preg_match('/\d{2}\/\d{2}\/\d{4}/',$value)):
  $this->date($value,'/',array('M','D','Y'));
endif;
//20.05.2009
if(preg_match('/\d{2}\.\d{2}\.\d{4}/',$value)):
  $this->date($value,'.',array('D','M','Y'));
endif;
//20 05 2009
if(preg_match('/\d{2}\s{1}\d{2}\s{1}\d{4}/',$value)):
  $this->date($value,' ',array('D','M','Y'));
endif;
// 14:55:32
if(preg_match('/\d{2}\:\d{2}\:\d{2}/',$value)):
  $this->time($value,':');
endif;
//09-05-20 if(preg_match('/\d{2}\-\d{2}\-\d{2}/',$value))
//20/05/09 if(preg_match('/\d{2}\/\d{2}\/\d{2}/',$value))
//20.05.09 if(preg_match('/\d{2}\.\d{2}\.\d{2}/',$value))
//20 05 09 if(preg_match('/\d{2}\s{1}\d{2}\s{1}\d{2}/',$value))
return value;
}


пример использования
PHP:
$value1='20.05.2009'; // RUS Format
$value2='05/20/2009'; // ENG Format
$value3='2009-05-20 13:10:55'; // MySQL DateTime
$value4='2009-05-20'; // MySQL Date
$value4='13:10:55'; // MySQL Time
echo dateformat($value1,'j F Y');
echo dateformat($value1,'d m Y H:i:s');
echo dateformat($value1,'d.m.Y');
echo dateformat($value1,'d F');

echo dateformat($value2,'j F Y');
echo dateformat($value2,'d m Y H:i:s');
echo dateformat($value2,'d.m.Y');
echo dateformat($value2,'d F');

echo dateformat($value3,'j F Y');
echo dateformat($value3,'d m Y H:i:s');
echo dateformat($value3,'d.m.Y');
echo dateformat($value3,'d F');

echo dateformat($value4,'j F Y');
echo dateformat($value4,'d m Y H:i:s');
echo dateformat($value4,'d.m.Y');
echo dateformat($value4,'d F');

echo dateformat($value5,'H i');
echo dateformat($value5,'H i s');
echo dateformat($value5,'a i');
echo dateformat($value5,'A i s');



!!!ТЕМУ ПРОШУ ЗАКРЫТЬ!!!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху