Если у меня две даты 20-4-2010 и 22-4-2010 в двух текстовых поле и Я хочу, чтобы даты были такими, как это 20, 21, 22. Как мне это получить?Как найти даты между двумя указанными дате?
10
A
ответ
14
Я уверен, на это ответили в четыре раза больше, но в любом случае:
$start = strtotime('20-04-2010 10:00');
$end = strtotime('22-04-2010 10:00');
for($current = $start; $current <= $end; $current += 86400) {
echo date('d-m-Y', $current);
}
Часть 10:00
предназначена для предотвращения того, чтобы код пропускал или повторял день из-за перехода на летнее время.
Давая количество дней:
for($i = 0; $i <= 2; $i++) {
echo date('d-m-Y', strtotime("20-04-2010 +$i days"));
}
С PHP5.3
$period = new DatePeriod(
new DateTime('20-04-2010'),
DateInterval::createFromDateString('+1 day'),
new DateTime('23-04-2010') // or pass in just the no of days: 2
);
foreach ($period as $dt) {
echo $dt->format('d-m-Y');
}
7
Вы можете использовать mktime()
.
mktime() полезен для выполнения арифметики и проверки даты, поскольку он автоматически рассчитает правильное значение для входа вне диапазона.
Если вы увеличиваете номер дня вы получите корректную дату обратно, даже если вы идете мимо конца месяца:
<?php
$day= 25;
$dateEnd = mktime(0,0,0,5,3,2010);
do {
$dateCur = mktime(0,0,0,4,$day,2010);
$day++;
print date('d-m-y', $dateCur) .'<br>';
} while ($dateCur < $dateEnd);
Выход:
25-04-10
26-04-10
27-04-10
28-04-10
29-04-10
30-04-10
01-05-10
02-05-10
03-05-10
1
Вы можете сделать:
$start = strtotime("2010-04-20"); // get timestamp for start date.
$end = strtotime("2010-04-22"); // get timestamp for end date.
// go from start timestamp to end timestamp adding # of sec in a day.
for($t=$start;$t<=$end;$t+=86400) {
// get the date for this timestamp.
$d = getdate($t);
// print the date.
echo $d['mday'].'-'.$d['mon'].'-'.$d['year']."\n";
}
Выход:
20-4-2010
21-4-2010
22-4-2010
-1
Попробуйте это, надеюсь, это поможет помогает
$begin = date("Y-m-d", strtotime($date);
$end = date("Y-m-d", strtotime($date));
$begin = new DateTime($begin);
$end = new DateTime($end);
for ($i = $begin; $i <= $end; $i=$i->modify('+1 day')) {
echo $i->format('Y-m-d');
}
0
/**
* Function to list of weeks start and end.
* @param string strDateFrom (Date From "YYYY-MM-DD")
* @param string strDateTo (Date To "YYYY-MM-DD")
* @return array weeks
*/
function getWeeksBetweenTowDates($date_from, $date_to) {
$startweek = $current_week = date("W", strtotime($date_from));
$endweek = date("W", strtotime($date_to));
$current_year = date("Y", strtotime($date_from));
$current_yearweek = date("Y", strtotime($date_from)) . $startweek;
$end_yearweek = date("Y", strtotime($date_to)) . $endweek;
$start_day = 0;
$end_day = 0;
while ($current_yearweek <= $end_yearweek) {
$dto = new DateTime();
if ($start_day == 0) {
$start_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 0)->format('Y-m-d');
$end_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 6)->format('Y-m-d');
} else {
$start_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 0)->format('Y-m-d');
$end_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 6)->format('Y-m-d');
}
$arr_weeks[sprintf("%02d", $current_week)] = $start_day . " =>" . $end_day;
$last_yearweek_in_year = $current_year . date("W", strtotime('31-12-' . $current_year));
if ($current_yearweek == $last_yearweek_in_year) { //last week in the year
$current_week = 1;
$current_year = ($current_year + 1);
} else {
$current_week = ($current_week + 1);
}
$current_yearweek = $current_year . sprintf("%02d", $current_week);
}
return $arr_weeks;
}
Run Like: date_from = 2015-10-20, date_to = 2016-04-15
$arr_weeks = $this->getWeeksBetweenTowDates($date_from, $date_to);
Выход:
Array
(
[43] => 2015-10-18 =>2015-10-24
[44] => 2015-10-25 =>2015-10-31
[45] => 2015-11-01 =>2015-11-07
[46] => 2015-11-08 =>2015-11-14
[47] => 2015-11-15 =>2015-11-21
[48] => 2015-11-22 =>2015-11-28
[49] => 2015-11-29 =>2015-12-05
[50] => 2015-12-06 =>2015-12-12
[51] => 2015-12-13 =>2015-12-19
[52] => 2015-12-20 =>2015-12-26
[53] => 2015-12-27 =>2016-01-02
[01] => 2016-01-03 =>2016-01-09
[02] => 2016-01-10 =>2016-01-16
[03] => 2016-01-17 =>2016-01-23
[04] => 2016-01-24 =>2016-01-30
[05] => 2016-01-31 =>2016-02-06
[06] => 2016-02-07 =>2016-02-13
[07] => 2016-02-14 =>2016-02-20
[08] => 2016-02-21 =>2016-02-27
[09] => 2016-02-28 =>2016-03-05
[10] => 2016-03-06 =>2016-03-12
[11] => 2016-03-13 =>2016-03-19
[12] => 2016-03-20 =>2016-03-26
[13] => 2016-03-27 =>2016-04-02
[14] => 2016-04-03 =>2016-04-09
[15] => 2016-04-10 =>2016-04-16
)
Смежные вопросы
- 1. Как найти строки между двумя указанными текстами
- 2. Получение даты между двумя указанными датами
- 3. Найти количество дней между двумя указанными датами
- 4. Как найти узлы целиком между двумя указанными узлами
- 5. Как найти конкретные даты между двумя годами
- 6. regex - найти определенный текст между двумя указанными границами
- 7. Как найти разницу между двумя датами
- 8. Как перечислить все даты между двумя датами
- 9. Списку дней между двумя указанными датами
- 10. Как повторить, по месяцам, между двумя указанными датами
- 11. Как пройти все пути между двумя указанными вершинами в графе?
- 12. Порядок по дате Разница между двумя столбцами даты
- 13. Даты между двумя датами
- 14. даты между двумя днями
- 15. PHP: нужно найти все даты между двумя датами по дате окончания календаря
- 16. поиск MYSQL между двумя даты
- 17. Поиск записей между двумя колоннами даты
- 18. Как проверить, существует ли переменная между двумя указанными числами?
- 19. Как получить даты между двумя датами
- 20. Как найти даты между двумя датами в SQL Server 2005
- 21. Intersect между двумя даты интервалы
- 22. LINQ элементы фильтрации внутри списка между двумя указанными датами
- 23. mysql запрос даты, между двумя полями даты
- 24. Найти запись между двумя датами
- 25. Регулярное совпадение между указанными датами?
- 26. Как найти данные между двумя датами
- 27. Как найти разницу между двумя моментами?
- 28. даты между двумя конкретными датами
- 29. Найти таблицы SQL Server с двумя указанными именами столбцов
- 30. Проверка даты между двумя ошибками даты, clueless
+1 Самый лучший ответ ... –
+1 для классов Date *, -1 для вызова его «причудливый» и «overkill», +1 для предоставления чего-то другого, кроме часто заданного 'strtotime' решения. :) – salathe
@gordon вы можете объяснить, почему установка 10:00 утра позволяет тем, кто будет отвечать за DST соответственно? Для справки, почему я спрашиваю, см. Http://stackoverflow.com/questions/15302469/problems-with-finding-the-days-between-two-unix-timestamps – Shackrock