Как можно принудительно изменить день в дате и времени в php
$date = date_create('2013-10-27');// This is the date that inputed in textbox and that format is (Y-m-d)
$date = date_create('2013-10-10');// and if i click the button i want to force change the 27 to 10?
Должен ли я использовать date_modify и выполнить некоторый цикл или есть другой способ изменить его простым способом, а не циклическим.
5 answers
Примечание: Если вы просто пытаетесь изменить значение дня на дату, полученную из отправленного <input>
из <form>
. Вы можете попробовать выполнить следующие действия:
$date = '2013-10-27'; // pass the value of input first.
$date = explode('-', $date); // explode to get array of YY-MM-DD
//formatted results of array would be
$date[0] = '2013'; // YY
$date[1] = '10'; // MM
$date[2] = '17'; // DD
// when trigger a button to change the day value.
$date[2] = '10'; // this would change the previous value of DD/Day to this one. Or input any value you want to execute when the button is triggered
// then implode the array again for datetime format.
$date = implode('-', $date); // that will output '2013-10-10'.
// lastly create date format
$date = date_create($date);
explode
, implode
, date
, strtotime
, preg_replace
и т.д. Серьёзно?
ОП использует класс DateTime
, нет необходимости понижать его код с помощью такого рода решений bisare.
$in = date_create('2013-10-27');
// example 1
$out = date_create($in->format('Y-m-10'));
echo $out->format('Y-m-d') . "\n";
// example 2
$out = clone $in;
$out->setDate($out->format('Y'), $out->format('m'), 10);
echo $out->format('Y-m-d') . "\n";
// example 3
$out = clone $in;
$out->modify((10 - $out->format('d')) . ' day');
echo $out->format('Y-m-d') . "\n";
Вы можете использовать собственный PHP " функция date_date_set" для внесения этого изменения.
$date = date_create('2013-10-27');
echo $date->format('Y-m-d');
2013-10-27
date_date_set($date,
date_format($date, 'Y'),
date_format($date, 'm'),
10);
echo $date->format('Y-m-d');
2013-10-10
Или с использованием Объектно-ориентированного стиля:
$date = new DateTime('2013-10-27');
echo $date->format('Y-m-d');
2013-10-27
$date->setDate($date->format('Y'), $date->format('m'), 10);
echo $date->format('Y-m-d');
2013-10-10
Использовать функцию PCRE
$date = '2013-10-27';
$new_date = preg_replace("/\d{2}$/", "10", $date);
$date = date("Y-m-d", strtotime("2013-10-10"));
Обновлено: чтобы заставить изменить день с 27 на 10
1) получить год и месяц
$date = date("Y-m-", strtotime( $_POST['user_selected_date'] ));
2) добавьте свой день
$date .= '10';
Также вы можете закончить его за ОДИН шаг
$date = date("Y-m-10", strtotime( $_POST['user_selected_date'] ));