Получение следующих 6 дней с текущего дня?
Я пытаюсь сохранить следующие 6 дней с текущего дня, но я немного застрял здесь, как хранить все следующие 6 дней в $weekOfdays
. Есть ли какая-нибудь простая функция для этого?
<?php
$weekOfdays = array();
$day = date('l');
$weekOfdays[] = $day;
$day = strtotime($day);
$next = strtotime("+6 day",$day);
$weekOfdays[] = date("l",$next);
var_dump($weekOfdays);
// output
// array (size=2)
// 0 => string 'Monday' (length=6)
// 1 => string 'Sunday' (length=6)
?>
Я хочу видеть, что массив похож на этот
array (size=7)
0 => string 'Monday' (length=6)
1 => string 'Tuesday' (length=7)
2 => string 'Wednesday' (length=9)
3 => string 'Thursday' (length=8)
4 => string 'Friday' (length=6)
5 => string 'Saturday' (length=8)
6 => string 'Sunday' (length=6)
Ответы
Ответ 1
Здесь один, который напрямую не полагается на выполнение математики самостоятельно:
$days = [];
$period = new DatePeriod(
new DateTime(), // Start date of the period
new DateInterval('P1D'), // Define the intervals as Periods of 1 Day
6 // Apply the interval 6 times on top of the starting date
);
foreach ($period as $day)
{
$days[] = $day->format('l');
}
Ответ 2
Есть много способов, о которых упоминается ниже:
1) с использованием функции strtotime
и переменной temp $date
в цикле
$date = date('Y-m-d'); //today date
$weekOfdays = array();
for($i =1; $i <= 7; $i++){
$date = date('Y-m-d', strtotime('+1 day', strtotime($date)));
$weekOfdays[] = date('l : Y-m-d', strtotime($date));
}
print_r($weekOfdays);
2) с использованием функции strtotime
и +$i days
с текущей даты
$date = date('Y-m-d'); //today date
$weekOfdays = array();
for($i =1; $i <= 7; $i++){
$weekOfdays[] = date('l : Y-m-d', strtotime("+$i day", strtotime($date)));
}
print_r($weekOfdays);
3) с помощью метода DateTime
и modify
$date = date('Y-m-d'); //today date
$weekOfdays = array();
$date = new DateTime($date);
for($i=1; $i <= 7; $i++){
$date->modify('+1 day');
$weekOfdays[] = $date->format('l : Y-m-d');
}
print_r($weekOfdays);
4), используя класс DateTime
и DateInterval
класс
$date = date('Y-m-d'); //today date
$weekOfdays = array();
$date = new DateTime($date);
for($i=1; $i <= 7; $i++){
$date->add(new DateInterval('P1D'));
$weekOfdays[] = $date->format('l : Y-m-d');
}
print_r($weekOfdays);
5), используя DatePeriod
, DateInterval
и DateTime
class
$date = date('Y-m-d', strtotime('+1 day')); //tomorrow date
$weekOfdays = array();
$begin = new DateTime($date);
$end = new DateTime($date);
$end = $end->add(new DateInterval('P7D'));
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
foreach($daterange as $dt){
$weekOfdays[] = $dt->format('l : Y-m-d');
}
print_r($weekOfdays);
Сегодня вторник, 12 апреля, поэтому вывод всего кода будет:
Array
(
[0] => Wednesday : 2016-04-13
[1] => Thursday : 2016-04-14
[2] => Friday : 2016-04-15
[3] => Saturday : 2016-04-16
[4] => Sunday : 2016-04-17
[5] => Monday : 2016-04-18
[6] => Tuesday : 2016-04-19
)
Для более подробной информации смотрите:
Ответ 3
Я считаю, что вам нужен цикл for:
$weekOfdays = array();
$day = date('l');
$weekOfdays[] = $day;
$day = strtotime($day);
for($i = 1; $i <= 6; ++$i) {
$next = strtotime("+$i day",$day);
$weekOfdays[] = date("l",$next);
}
Ответ 4
Просто используйте цикл while
, чтобы настроить день за днем. Просто добавьте еще один день +1
:
$weekOfdays = array();
$date = time();
$next = strtotime('+6 days');
while ($date <= $next) { // loop until next six
$weekOfdays[] = date('l', $date); // push the day name
$date = strtotime('+1 day', $date); // add +1 on $date
}
print_r($weekOfdays);
Ответ 5
Использование функции strtotime
и while-loop
$weekOfdays = array();
$current_date = time(); //get current date.
$next = strtotime('+6 days');
while ($current_date <= $next) {
$weekOfdays[] = date('l', $current_date);
$current_date = strtotime('+1 day', $current_date); // add next date
}
echo "<pre>";
print_r($weekOfdays);
echo "</pre>";
Результат:
Array
(
[0] => Friday
[1] => Saturday
[2] => Sunday
[3] => Monday
[4] => Tuesday
[5] => Wednesday
[6] => Thursday
)
Ответ 6
здесь есть простая модификация в вашем коде, в котором будут отображаться итоговые дни
<?php
$weekOfdays = array();
$day = date('l');
$weekOfdays[] = $day;
$day = strtotime($day);
$total_days='5';//you can increase or decrease the day to display
for($i=1;$i<=$total_days;$i++){
$next = strtotime("+$i day",$day);
$weekOfdays[] = date("l",$next);
}
print_r($weekOfdays);
?>
И его вне
Array (
[0] => Monday
[1] => Tuesday
[2] => Wednesday
[3] => Thursday
[4] => Friday
[5] => Saturday )
Ответ 7
$weekOfdays = array();
$date = date("l");// current day
for($i = 0; $i < 7; $i++) {
$weekOfdays[] = date("l", strtotime($date . "+$i day"));
}
var_dump($weekOfdays);
Ответ 8
Проверьте следующее. Если массив получает 7-дневное имя, включая текущий день.
$weekOfdays = array();
for($i = 1,$nxtday = time(); $i<=7; $i++)
{
$weekOfdays[] = date("l", $nxtday);
$nxtday += 86400;
}
var_dump($weekOfdays);
Ответ 9
<?php
$weekOfdays = array();
$currentDay = time();
for ($i = 0; $i < 7; $i++) {
$weekOfdays[] = date('l', $currentDay);
$currentDay = strtotime('+1 day', $currentDay);
}
var_dump($weekOfdays);
будет выводиться (сегодня в пятницу)
array (size=7)
0 => string 'Friday' (length=6)
1 => string 'Saturday' (length=8)
2 => string 'Sunday' (length=6)
3 => string 'Monday' (length=6)
4 => string 'Tuesday' (length=7)
5 => string 'Wednesday' (length=9)
6 => string 'Thursday' (length=8)
Ответ 10
<?php
$weekOfDays = array();
$now = time();
$daysCnt = 6;
while ($daysCnt > 0) {
$now = mktime(0,0,0,date('m',$now),date('d',$now)+1,date('Y',$now));
$weekOfDays[] = date('l', $now);
$daysCnt--;
}
print_r($weekOfDays);
выход:
Array
(
[0] => Saturday
[1] => Sunday
[2] => Monday
[3] => Tuesday
[4] => Wednesday
[5] => Thursday
)
целью использования mktime() вместо strtotime() является функция:
<?php
date_default_timezone_set("Europe/Moscow");
$today = date("d-m-Y",mktime(0,0,0,4,28,2013)); // 28-04-2013, sunday
$lastWeek = strtotime("last week $today");
$thisWeek = strtotime("this week $today");
$nextWeek = strtotime("next week $today");
echo "last week - ".$lastWeek." / ".date("d-m-Y H:i\n",$lastWeek);
echo "this week - ".$thisWeek." / ".date("d-m-Y H:i\n",$thisWeek);
echo "next week - ".$nextWeek." / ".date("d-m-Y H:i\n",$nextWeek);
результат:
last week - 1366574400 / 22-04-2013 00:00; expected 15-04-2013
this week - 1367179200 / 29-04-2013 00:00; expected 22-04-2013
next week - 1367784000 / 06-05-2013 00:00; expected 29-04-2013
Я рекомендую дважды проверять ожидаемые результаты, когда вы используете strtotime()