Проблема с коротким форматом даты в php - PullRequest
2 голосов
/ 20 октября 2010

У меня проблема с функцией даты в php. Если я предоставлю строку в формате "d.m.y", например, "01.01.01", она будет отображена как текущая дата, что означает, что php запутался.

Я нашел:

Примечание:

Формат "День, месяц и год из двух цифр с точками или табуляциями" (дд [. \ T] мм "." Гг) работает только для значений года от 61 (включительно) до 99 (включительно) - вне этих лет формат времени "ЧЧ [.: ММ [.:] СС" имеет старшинство.

на: сайте php.net

Как переопределить это поведение?

Мне известна функция date_create_from_format, которая работала бы нормально, если бы я знал, что ввод всегда будет в формате "d.m.y", но это не так.

ОБНОВЛЕНИЕ 1:

код

$date = new DateTime('01.01.01');
echo $date->format('Y-m-d');

выходы 2010-10-19 и я хотел 2001-01-01.

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Просто прочитайте документацию! Сайт PHP отлично

Кажется, вы хотите переформатировать дату?

mktime () дает метку времени Unix из составных частей date () дает строку из unixtimestamp (или подразумевается сейчас) getdate () возвращает ассоциативный массив из отметки времени unix

Я думаю, что вы хотите -

$ arr = explode ($ dateIn, ':'); // получаем массив [день, месяц, год]
$ timestamp = mktime (0,0,0, $ arr [0], $ arr [1], $ arr [2]) // метка времени unix, длинное целое число, представляющее время
дата (DESIREDFORMAT, $ timestamp);

проверить форматы вывода здесь - http://us2.php.net/manual/en/function.date.php

1 голос
/ 20 октября 2010

Для форматирования даты, отличной от текущей, используйте второй параметр.Например:

echo date("d.m.y", 1255982665);

эхо 19.10.09

0 голосов
/ 20 октября 2010
function getDateFromString( $str )
{
    $date = DateTime::createFromFormat( 'd.m.y', $str );
    if ( $date !== false )
        return $date->getTimestamp();

    // you can try other common formats here
    // ...

    // otherwise just parse whatever there is
    return strtotime( $str );
}

echo date( 'd.m.Y H:i', getDateFromString( '01.01.01' ) ); // 01.01.2001 20:14

Редактировать

Чтобы настроить его немного больше, вы получите точный вывод:

function getDateTimeFromString( $str )
{
    $date = DateTime::createFromFormat( 'd.m.y', $str );
    if ( $date !== false )
        return $date;

    // you can try other common formats here
    // ...

    // otherwise just parse whatever there is
    return new DateTime( $str );
}

$date = getDateTimeFromString( '01.01.01' );
echo $date->format( 'Y-m-d' ); // 2001-01-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...