преобразовать дату в этом формате '031012' в дату, к которой я могу добавить дни - PullRequest
0 голосов
/ 12 марта 2012

У меня есть дата в этом формате 030512 (ddmmyy).
Но у меня возникли проблемы с преобразованием этого формата в год, к которому я могу добавить дни.

В основном .. Я извлек дату выше из текстового файла, Теперь мне нужно иметь возможность добавить количество дней к нему. Но у меня возникают проблемы с анализом даты в этом формате.

Есть ли другой способ сделать это, а не что-то вроде этого:

// I have a date in this format
$date = '030512'; // 03 May 2012

$day = substr($date,0,2);
$month = substr($date, 2,2);
$year = substr($date, 4,2);
$date_after = $day . "-" . $month . "-".$year;

// Now i need to add x days to this
$total_no_nights = 010; // must be this format
$days_to_add = ltrim($total_no_nights,"0"); // 10, remove leading zero

// how do i add 10 days to this date.

Ответы [ 5 ]

4 голосов
/ 12 марта 2012

Вы можете сделать это (php> = 5.3):

$date = DateTime::createFromFormat('dmy', '030512');
$date->modify('+1 day');
echo $date->format('Y-m-d');

http://www.php.net/manual/en/datetime.createfromformat.php

Для php <5.3: </p>

$dateArray = str_split('030512', 2);
$dateArray[2] += 2000;
echo date("d/m/Y", strtotime('+1 day', strtotime(implode('-', array_reverse($dateArray)))));
3 голосов
/ 12 марта 2012

попробуйте использовать месяц / день / год, который у вас уже есть:

$date = "$month/$day/$year";
$change = '+10 day';
echo date("d/m/Y", strtotime($change, strtotime($date)));
1 голос
/ 12 марта 2012

Предполагая, что дата всегда будет в будущем (или, по крайней мере, после 1 января 2000 года), вы не ошибаетесь:

// I have a date in this format
$date = '030512'; // 03 May 2012

$day = substr($date,0,2);
$month = substr($date, 2,2);
$year = substr($date, 4,2);
// dd-mm-yy is not a universal format but we can use mktime which also gives us a timestamp to use for manipulation
$date_after = mktime( 0, 0, 0, $month, $day, $year );

// Now i need to add x days to this
$total_no_nights = "010"; // must be this format
$days_to_add = intval( $total_no_nights ); // No need to use ltrim

// Here's the "magic". Again it returns a timestamp
$new_date = strtotime( "+$days_to_add days", $date_after );

Использовать объект DateTime было бы проще, но вы говорите, что не используете PHP5.3.

1 голос
/ 12 марта 2012

Вы не можете манипулировать датами со строками, потому что они не являются датами. В PHP вы можете использовать метки времени Unix (которые на самом деле являются целыми числами ...) или объекты DateTime. В вашем случае:

$timestamp = strtotime('-10 days', mktime(0, 0, 0, $month, $day, $year));
echo date('r', $timestamp);

... или:

$object = new DateTime("$year-$month-$day");
$object->modify('-10 days');
echo $object->format('r');

Также обратите внимание, что 010 является восьмеричным числом, которое соответствует 8 в десятичном виде.

0 голосов
/ 12 марта 2012

с помощью функции преобразования в sql даты можно получить в соответствующем формате.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...