1905-01-01 на 1905.01.01 (год <1970)

ccop

Новичок
1905-01-01 на 1905.01.01 (год <1970)

Есть дата в формате в формате 0000-00-00, причем любая. начиная от 0000 и до 2030.
Как для такого формата можно получить форматированную дату с помощью функции date() (или других аналогов, если такие есть)?

Если бы год был больше 1970, проблем бы не было.

Про adodb-time я знаю, но там сильно большой класс и много ненужных мне функций, хотелось бы что-нить простое.
 

ccop

Новичок
zerkms
Дело в том, что формат даты может быть другой, тот который поддерживает date.
И вывод может быть не только гггг.мм.дд, а и гггг/мм/дд и т.п.

SelenIT
Это совсем не то, про эту ф-ю я знаю... Мне нужно конвертировать дату взятую не из Базы.

-~{}~ 05.05.06 12:37:

По сути нужен аналог DATE_FORMAT, только на PHP.

Ну вот к пример вытащить все параметры даты можно с помощью:
if (preg_match('!(\d{4})-(\d{2})-(\d{2})( (\d{2}):(\d{2}):(\d{2}))?!', "2004-12-31 55:22:33", $m)) {
if (isset($m[4])){
$mktime = mktime($m[5],$m[6],$m[7],$m[2],$m[3],$m[1]);
$template = "{y}-{m}-{d} {h}:{i}:{s}";
}
else{
$mktime = mktime(0,0,0,$m[2],$m[3],$m[1]);
$template = "{y}-{m}-{d}";
}
}
echo $m[5],$m[6],$m[7],$m[2],$m[3],$m[1];


Вот как потом отформатировать, ведь $mktime - будет не коректна если год <1970.
 

ccop

Новичок
SiMM
Я понимаю, а как быть?

-~{}~ 05.05.06 16:53:

Ведь даже ф-я date принимает только секунды от 1970 года. Можно было бы конечно через формулую какуе-то выщитать, проблема в том, как отформатировать дату.
 

Фанат

oncle terrible
Команда форума
господи, тебе же не нужна полная поддержка синтаксиса date
тебе нудна параформатов фиксированных.
сделай их и успокойся уже.
вот, блин, находятся любителе себе и другим мозг парить.
adodb его не устраивает - слишком сложное.
руками его не устраивает - слишком простое
таким, блин, что ни скажи - всё плохо.
 

ccop

Новичок
Фанат
Нужна если не полная, то 80%, от меня не зависит, какой формат выберет пользователь.

И руками не страивает, так как я не знаю, как это реализовать, поэтому и создал тему. Мог бы, не спрашивал бы.

Или мне, как SiMM посоветовал, все форматы через str_replace выводить?
 

Фанат

oncle terrible
Команда форума
от меня не зависит, какой формат выберет пользователь.
вот только не надо здесь петь военных песен про пользователей, которые изучают пхп, функцию дате и её формат.
не надо.
ещё раз повторяю - прежде, чем искать решение задачи - посмотри на неё трезвыми глазами.
 

lionheart

Новичок
ccop
<?php
if (preg_match('!(\d{4})-(\d{2})-(\d{2})( (\d{2})\d{2})\d{2}))?!', "2004-12-31 55:22:33", $m))
?>
тебе нет нужды использовать
<?php
mktime($m[5],$m[6],$m[7],$m[2],$m[3],$m[1]);
?>
обойдись без нее ты и так уже получил нужные данные и записал их. Просто выведи их с нужным форматированием
 

zerkms

TDD infected
Команда форума
lionheart
если уж и браться за регулярные выражение - то сразу и производить форматирование средствами preg_replace
 

lionheart

Новичок
zerkms
бесспорно - я же в принципе если использует то пускай себе в удовольствие пользуется. Я просто процитировал его код. Естественно
PHP:
str_replace('-', '.', $date)
единственно верное решение.
 
Сверху