форматирование даты.

Статус
В этой теме нельзя размещать новые ответы.

mixwell

Новичок
форматирование даты.

Добрый Вечер. Подскажите пожлайста как лучше всего преобразовывать дату mysql -> php ->mysql с разбиением. Суть в том, что в базе хранится дата рождения в формате DATE(yyyy-mm-dd) и нужно ее приобразовать так, чтобы можно было ее представить по частям, т.е. с помощью <select>, а потом обратно собирать в одно целое и обратно в базу.
Пробовал забирать данные с помощью UNIX_TIMESTAMP(birthDay) AS birthDay1, потом $date_time_array = getdate($row->birthDay1) в массив. Но тут проблема, UNIX_TIMESTAMP() если дата раньше чем 31 января 1969 возвращает ноль. А у меня есть даты и 1924 года и т.д. Подскажите как решить проблемму?
 

basboy

Новичок
Если он в пхп получает из селектов, то какие регулярки/explode?
Обычная конкатенация и в путь
 

zerkms

TDD infected
Команда форума
basboy
а читать вопрос, перед тем, как постить, всё таки надо
 

FractalizeR

Новичок
Чтобы получить дату из MySQL -> PHP, проще всего сделать
SELECT UNIX_TIMESTAMP(date). В PHP time() и date() возвращают значение такого же типа (дата и время в секундах, исчисляющиеся с January 1 1970 00:00:00 GMT).

Чтобы из PHP в MYSQL: date('Y-m-d H:i:s', $myPHPDateTime);
 

mixwell

Новичок
to FractalizeR я же указал , что есть даты более ранние чем 1970, а так в начале и использовал UNIX_TIMESTAMP(date).
Спасибо zerkms! использовал DAY, MONTH, YEAR. а потом склеил mktime ('', '', '', $bithDayMonth, $bithDayDay, $bithDayYear); Тупо забыл про эти функции, хотя чуть выши их использовал. Больше спасибо !
 

Фанат

oncle terrible
Команда форума
FractalizeR
а читать вопрос, перед тем, как постить, всё таки надо

mixwell
объясни, чем тебя не устраивает простое разбивение по дефису и простая склейка строки из трех переменных?

-~{}~ 14.01.08 19:48:

я же указал , что есть даты более ранние чем 1970, а так в начале и использовал UNIX_TIMESTAMP(date).
Спасибо zerkms! использовал DAY, MONTH, YEAR. а потом склеил mktime
чума.
чем думают эти люди...
 

Фанат

oncle terrible
Команда форума
каким боком тут mktime? Зачем тебе эта функция вообще?

-~{}~ 14.01.08 19:52:

Я думаю что тут разницы нет.
Я думаю, что ты не думаешь вообще. Даже не пытаешься.
Если бы думал, то уж примитивную операцию - разбить строку по разделителю - сообразил бы самостоятельно. А не стоял, раскрыв рот, ожидаючи, пока тебе туда скажут волшебные функции mysql.

И уж тем более не заявлял в одном и том же предложении, что unix timestamp тебя не устраивает и поэтому ты хочешь получить именно его!
 

FractalizeR

Новичок
Автор оригинала: *****
FractalizeR
а читать вопрос, перед тем, как постить, всё таки надо
Вы правы, поторопился. Но я бы постарался избежать засорения SQL запросов разбиением даты и времени функциями. Можно сделать так:

Код:
<?php
$dateStr = '1900-11-10 14:53:21'; //Normal MySQL date
$matches = array();
preg_match('/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/', $dateStr, $matches);

$myDate = new DateTime();
$myDate->setDate($matches[1], $matches[2], $matches[3]);
$myDate->setTime($matches[4], $matches[5], $matches[6]);

echo $myDate->format('Y-m-d H:i:s');

?>
Проверил только что PHP 5.2.1 - работает.

P.S. Почему-то форум заменяет скобку и двоеточие на смайлик даже внутри тегов PHP и CODE
 

Фанат

oncle terrible
Команда форума
обоже.
explode. ему нужна функция explode. а не 10 регов с подтанцовками.

вся задача, если решать её включив мозги, а не тонну учебников, сводится к двум строчкам
list($d,$m,$y)=explode("-",$row->birthDay1); чтобы вписать в селекты
и
$date=$_POST['y']."-".$_POST['m']."-".$_POST['f']. чтобы забить в базу.
Не забыть mysql_real_escape_string
Эстеты могут для проверки воспользоваться checkdate
всё!
БОЛЬШЕ. НИЧЕГО. НЕ НУЖНО!
 

sav21age

Новичок
*****
Сначало дату нужно получить: SELECT DATE_FORMAT(date, '%d %m %Y') as date FROM ...
 

Xyz

Новичок
Автор оригинала: *****
обоже.
explode. ему нужна функция explode. а не 10 регов с подтанцовками.

вся задача, если решать её включив мозги, а не тонну учебников, сводится к двум строчкам
list($d,$m,$y)=explode("-",$row->birthDay1); чтобы вписать в селекты
и
$date=$_POST['y']."-".$_POST['m']."-".$_POST['f']. чтобы забить в базу.
Не забыть mysql_real_escape_string
Эстеты могут для проверки воспользоваться checkdate
всё!
БОЛЬШЕ. НИЧЕГО. НЕ НУЖНО!
не мог удержаться чтоб заново не процитировать пост :)

спасибо! rtfm,rtfm,rtfm,поиск,поиск,поиск
 

vovanium

Новичок
sav21age
Сначало дату нужно получить: SELECT DATE_FORMAT(date, '%d %m %Y')
Зачем? У мускуля по умолчанию формат даты 2009-06-12, просто Фaнат немного переменные в листе спутал. Так что просто explode. Или ты считаешь что по пробелу php лучше explode делает?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху