изменить формат даты с помощью php

php date datetime

176 просмотра

6 ответа

449 Репутация автора

Я хочу изменить формат даты по php, у меня есть дата в таком формате, d/m/Yи я хочу изменить наY-m-d

Я видел этот вопрос, но для моего случая я все еще получаю пустое значение.

EX:$_REQUEST["date_moc"]='21/07/2014';
Я пытался сделать, echo strtotime($_REQUEST["date_moc"]);но ничего не появляется на моем экране.

и когда echo date("Y-m-d",strtotime($_REQUEST["date_moc"]));я получаю1970-01-01

Любая помощь, пожалуйста, мне действительно интересно с моим кодом, который возвращает пустое значение, например, если возможно, пожалуйста, сообщите мне о моей проблеме. Я с нетерпением жду вашего ответа в ближайшее время!

Спасибо!

Автор: koe Источник Размещён: 21.07.2014 11:42

Ответы (6)


1 плюс

421 Репутация автора

Самый простой способ

$_REQUEST["date_moc"]='21/07/2014';
$explode = explode('/', $_REQUEST["date_moc"]);
list($day,$month,$year) = $explode;
$new_date = "$year-$month-$day";
echo $new_date;
Автор: turson Размещён: 21.07.2014 11:44

1 плюс

4471 Репутация автора

Это очень легко просто использовать DateTime::createFromFormat()

$date = DateTime::createFromFormat('d/m/Y', '21/07/2014');
echo $date->format('Y-m-d');

Смотрите живую демоверсию на eval.in


Для улучшения

Затем вы также можете проверить недопустимый ввод, если вы немного расширили фрагмент:

if(($date = DateTime::createFromFormat('d/m/Y', '21//2014')) !== false)
    echo $date->format('Y-m-d');
else
    echo 'Invalid format';

Но это только проверка шаблона, которая похожа на регулярное выражение, как

/ (\ D {1,2}) / (\ d {1,2}) / (\ d {4}) /

Это по-прежнему позволяет пользователю вводить что-то вроде:

50/13/2014

Чтобы проверить, является ли предоставленная дата действительной или недействительной, проверьте содержание DateTime::getLastErrors(). Он подробно расскажет вам, что пошло не так. Для примера выше вы получите что-то вроде этого:

array(4) {
  ["warning_count"]=>
  int(1)
  ["warnings"]=>
  array(1) {
    [10]=>
    string(27) "The parsed date was invalid"
  }
  ["error_count"]=>
  int(0)
  ["errors"]=>
  array(0) {
  }
}

Таким образом, согласно этой информации, мы можем немного расширить фрагмент. Что приводит нас к похожему результату:

$date = DateTime::createFromFormat('d/m/Y', '50/13/2014')

if($date !== false) {
    $dateLastErrors = $date->getLastErrors();

    if($dateLastErrors['error_count'] > 0 || $dateLastErrors['warning_count'] > 0)
        echo 'Invalid date';
    else
        echo $date->format('Y-m-d');
} else
    echo 'Invalid date format';
}

Который, наконец, будет проверять дату по формату проверки.

Автор: TiMESPLiNTER Размещён: 21.07.2014 11:46

0 плюса

31 Репутация автора

$date = $_REQUEST["date_moc"];// OR $date ='21/07/2014'; avoid $_REQUEST["date_moc"]='21/07/2014';
echo date('Y-m-d', strtotime($date)); 
Автор: sarath Размещён: 21.07.2014 11:46

1 плюс

3377 Репутация автора

Попробуйте это: - Рабочая демоверсия

$date = explode('/',str_replace('-','/',$_REQUEST["date_moc"]));

$updated_date = $date[2].'-'.$date[1].'-'.$date[0];

echo $updated_date;
Автор: Rakesh Shetty Размещён: 21.07.2014 11:46

0 плюса

8598 Репутация автора

Самый простой способ

$date ='21/07/2014';

$date = str_replace("/", "-", $date);

echo date("Y-m-d",strtotime($date));

Рабочая Демо

Автор: Satish Sharma Размещён: 21.07.2014 11:47

1 плюс

29 Репутация автора

$_REQUEST["date_moc"]='21/07/2014';
$original_date = explode('/', $_REQUEST["date_moc"]);
$year = $original_date[2]; // 2014
$month = $original_date[1]; // 07
$day =  $original_date[0]; // 21
$date = $year.'/'.$month.'/'.$day;
echo $date;

демонстрация

Автор: Jalpa Размещён: 21.07.2014 11:52
Вопросы из категории :
32x32