Подтвердить что ты не робот

Получить все дни и даты для выбранного месяца в году

как получить оба дня и даты для выбранного месяца выбранного года и показать в таблицах. например: я пробовал до сих пор.

<?php
$num_of_days = cal_days_in_month(CAL_GREGORIAN, 9, 2003);
for( $i=1; $i<= $num_of_days; $i++)
    $dates[]= str_pad($i,2,'0', STR_PAD_LEFT);
/*echo "<pre>";
print_r($dates);
echo "</pre>";*/
?>
<table>
    <tr>
<?php
foreach($dates as $date){
    echo"<td>".$date."</td>";
}
?>
    </tr>
</table>

это выполняет для меня этот код.

<table>
    <tbody><tr>
<td>01</td><td>02</td><td>03</td><td>04</td><td>05</td><td>06</td><td>07</td><td>08</td><td>09</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td><td>29</td><td>30</td>    </tr>
</tbody></table>

но я хочу еще одну строку ниже строки дат. который должен показывать день, связанный с этой датой?

днем ​​я имею в виду: понедельник, tues, wed и т.д. по дате я означает: 1, 2, 3, 4 и т.д.

так что это было бы как

<tr><td>1</td><td>2</td><td>3</td><td>4</td>
<tr><td>Mon</td><td>Tues</td><td>Wed</td><td>Thursday</td>

Надеюсь, я мог бы объяснить свое...

4b9b3361

Ответ 1

Вы можете использовать date('l') для получения соответствующего имени дня:

<?php
$date = '2003-09-01';
$end = '2003-09-' . date('t', strtotime($date)); //get end date of month
?>
<table>
    <tr>
    <?php while(strtotime($date) <= strtotime($end)) {
        $day_num = date('d', strtotime($date));
        $day_name = date('l', strtotime($date));
        $date = date("Y-m-d", strtotime("+1 day", strtotime($date)));
        echo "<td>$day_num <br/> $day_name</td>";
    }
    ?>
    </tr>
</table>

Ответ 2

Другой подход может заключаться в использовании объекта DateTime:

$aDates = array();
$oStart = new DateTime('2014-12-01');
$oEnd = clone $oStart;
$oEnd->add(new DateInterval("P1M"));

while ($oStart->getTimestamp() < $oEnd->getTimestamp()) {
    $aDates[] = $oStart->format('D d');
    $oStart->add(new DateInterval("P1D"));
}

Затем для печати:

foreach ($aDates as $day) {
    echo $day;
}

Для получения дополнительной информации о параметрах формата вы можете обратиться к: http://php.net/manual/en/function.date.php

Ответ 3

Вы можете попробовать что-то вроде этого

$myYearMonth = '2003-09';

$start = new DateTime(date('Y-m-01', strtotime($myYearMonth)));
$end = new DateTime(date('Y-m-t', strtotime($myYearMonth)));

$diff = DateInterval::createFromDateString('1 day');
$periodStart = new DatePeriod($start, $diff, $end);

foreach ( $periodStart as $dayDate ){
  echo '<td>'.$dayDate->format( "d\n" ).'</td><td>'.$dayDate->format( "l\n" ).'</td>';
}  

Ответ 4

Вам не следует использовать функцию date(), поскольку диапазон дат ограничен 1970-2038 годами в соответствии с документацией PHP:

Допустимый диапазон отметки времени, как правило, от Fri, 13 Dec 1901 20:45:54 GMT до Tue, 19 января 2038 03:14:07 GMT. (Это даты, соответствующие минимальным и максимальным значениям для 32-разрядного целого числа со знаком). Однако до PHP 5.1.0 этот диапазон был ограничен с 01-01-1970 по 19-01-2038 на некоторых системах (например, Windows).

Используя класс DateTime(), вы можете получить необходимую информацию за определенный месяц, используя следующую функцию. Это использует DateTime::format(), чтобы получить имя дня на английском языке (без локализации).

function getMonth($year, $month) {

    // this calculates the last day of the given month
    $last=cal_days_in_month(CAL_GREGORIAN, $month, $year);

    $date=new DateTime();
    $res=Array();

    // iterates through days
    for ($day=1;$day<=$last;$day++) {
            $date->setDate($year, $month, $day);

            $res[$day]=$date->format("l");
    }
    return $res;
}

Это приведет к возврату связанного массива следующего вида:

$res=getMonth(2015, 2);
print_r($res);


Array
(
[1] => Sunday
[2] => Monday
[3] => Tuesday
[4] => Wednesday
[5] => Thursday

[...]

)

Чтобы выводить данные в таблице из двух строк, вы можете использовать следующий код:

<?php
echo '<table><tr><td>'.implode('</td><td>', array_keys($res)).'</td></tr>';
echo '<tr><td>'.implode('</td><td>', $res).'</td></tr></table>';

Поскольку функция DateTime::format() не поддерживает локали для перевода, вы можете использовать ассоциативный массив для перевода перевода на другой язык.

Ответ 5

Полное решение ниже.

Я определяю количество дней в данном месяце/году. Затем я перебираю дни и создаю две требуемые строки одновременно.

Когда все сделано, две строки завернуты в таблицу и возвращаются вызывающему.

    <?php

    echo buildDate(12, 2017);

    function buildDate($month, $year)
    {
        // start with empty results
        $resultDate = "";
        $resultDays = "";
        // determine the number of days in the month
        $daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
        for ($i = 1; $i <= $daysInMonth; $i++)
        {
            // create a cell for the day and for the date
            $resultDate .= "<td>".sprintf('%02d', $i)."</td>";
            $resultDays .= "<td>".date("l", mktime(0, 0, 0, $month, $i, $year))."</td>";
        }
        // return the result wrapped in a table
        return "<table>".PHP_EOL.
        "<tr>".$resultDate."</tr>".PHP_EOL.
        "<tr>".$resultDays."</tr>".PHP_EOL.
        "</table>";
    }

    ?>

Ссылка phpfiddle: http://phpfiddle.org/main/code/ffjm-hqsu

Ответ 6

Попробуйте выполнить script:

// Day of month, e.g. 2014-12-14 if you need the table for december 2014
$date = time();

// Array containing the dates and weekdays
$days = array();
// loop to populate the array
for(
    $day = strtotime('midnight', strtotime(date('1 F Y', $date)));   /* first day of month */
    $day < strtotime(date('1 F Y', strtotime('next month', $date))); /* first day of next month */
    $day = strtotime('next day', $day)
){
    // insert current day into the array
    $days[date('d', $day)] = date('l', $day);
}

// print the row containing all day numbers
echo '<tr><td>'.implode('</td><td>', array_keys($days)).'</td></tr>';
// print the row containing all weekday names
echo '<tr><td>'.implode('</td><td>', $days).'</td></tr>';

Ответ 7

В вашем случае date('D', strtotime($date)) должен работать, но вам нужна дата в формате yyyy-mm-dd

Я сделал несколько тестов, поэтому результат:

for( $i=1; $i<= $num_of_days; $i++){
    $dates[]= str_pad($i,2,'0', STR_PAD_LEFT);
    $d = "2003-09-".$i;
    $days[] = date('D', strtotime($d));
}

Добавлен еще один tr для дней:

<tr>
<?php
foreach($days as $day){
    echo"<td>".$day."</td>";
}
?>
</tr>

Ответ 8

Метод DateTime, который создает массив-ассоциированный элемент date- > day.

Результаты за декабрь 2015 года выглядят следующим образом:

array(31) {
    [1] = string(7) "Tuesday"
    [2] = string(9) "Wednesday"
    [3] = string(8) "Thursday"
    [4] = string(6) "Friday"
    [5] = string(8) "Saturday"
    [6] = string(6) "Sunday"
    [7] = string(6) "Monday"
    [8] = string(7) "Tuesday"
    [9] = string(9) "Wednesday"
    [10] = string(8) "Thursday"
    [11] = string(6) "Friday"
    [12] = string(8) "Saturday"
    [13] = string(6) "Sunday"
    [14] = string(6) "Monday"
    [15] = string(7) "Tuesday"
    [16] = string(9) "Wednesday"
    [17] = string(8) "Thursday"
    [18] = string(6) "Friday"
    [19] = string(8) "Saturday"
    [20] = string(6) "Sunday"
    [21] = string(6) "Monday"
    [22] = string(7) "Tuesday"
    [23] = string(9) "Wednesday"
    [24] = string(8) "Thursday"
    [25] = string(6) "Friday"
    [26] = string(8) "Saturday"
    [27] = string(6) "Sunday"
    [28] = string(6) "Monday"
    [29] = string(7) "Tuesday"
    [30] = string(9) "Wednesday"
    [31] = string(8) "Thursday"
}

Полный код для получения нужной таблицы:

<?php
// Get an array of days
$arrayDays = getDays(12, 2015);

// Function to get an array of days
function getDays($month, $year){
   // Start of Month
   $start = new DateTime("{$year}-{$month}-01");
   $month = $start->format('F');

   // Prepare results array
   $results = array();

   // While same month
   while($start->format('F') == $month){
      // Add to array
      $day              = $start->format('l');
      $date             = $start->format('j');
      $results[$date]   = $day;

      // Next Day
      $start->add(new DateInterval("P1D"));
   }

   // Return results
   return $results;
}
?>


<!-- Output the Table -->
<table>
   <tr>
      <?php foreach (array_keys($arrayDays) as $someDate): ?>
         <td><?= $someDate; ?></td>
      <?php endforeach; ?>
   </tr>
   <tr>
      <?php foreach (array_values($arrayDays) as $someDate): ?>
         <td><?= $someDate; ?></td>
      <?php endforeach; ?>
   </tr>
</table>