Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 2
Регистрация: 01.12.2010
Сообщений: 264
1

Календарь на предыдущий месяц

19.06.2014, 13:15. Показов 2281. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется такой такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
// Устанавливаем текущий год, месяц и день
list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-m-d'));
 
// Устанавливаем текущий год, месяц в зависимости от возможных параметров GET 
if (isset($_GET['month'])) {
    list($iMonth, $iYear) = explode('-', $_GET['month']);
    $iMonth = (int)$iMonth;
    $iYear = (int)$iYear;
} else {
    list($iMonth, $iYear) = explode('-', date('n-Y'));
}
 
// Получаем названия и количество дней в конкретном месяце
$iTimestamp = mktime(0, 0, 0, $iMonth, $iNowDay, $iYear);
list($sMonthName, $iDaysInMonth) = explode('-', date('F-t', $iTimestamp));
 
// Получаем предыдущий год и месяц 
$iPrevYear = $iYear;
$iPrevMonth = $iMonth - 1;
if ($iPrevMonth <= 0) {
    $iPrevYear--;
    $iPrevMonth = 12; // set to December
}
 
// Получаем следующий год и месяц
$iNextYear = $iYear;
$iNextMonth = $iMonth + 1;
if ($iNextMonth > 12) {
    $iNextYear++;
    $iNextMonth = 1;
}
 
// Получаем количество дней в предыдущем месяце
$iPrevDaysInMonth = (int)date('t', mktime(0, 0, 0, $iPrevMonth, $iNowDay, $iPrevYear));
 
// Получаем числовое представление дней недели от первого дня конкретного (текущего) месяца.
$iFirstDayDow = (int)date('w', mktime(0, 0, 0, $iMonth, 1, $iYear));
 
// С этого дня начинается предыдущий месяц 
$iPrevShowFrom = $iPrevDaysInMonth - $iFirstDayDow + 1;
 
// Если предыдущий месяц
$bPreviousMonth = ($iFirstDayDow > 0);
 
// Тогда первый день
$iCurrentDay = ($bPreviousMonth) ? $iPrevShowFrom : 1;
 
$bNextMonth = false;
$sCalTblRows = '';
 
// Генерируем строки календаря
for ($i = 0; $i < 6; $i++) { // 6-weeks range
    $sCalTblRows .= '<tr>';
    for ($j = 0; $j < 7; $j++) { // 7 days a week
 
        $sClass = '';
        if ($iNowYear == $iYear && $iNowMonth == $iMonth && $iNowDay == $iCurrentDay && !$bPreviousMonth && !$bNextMonth) {
            $sClass = 'today';
        } elseif (!$bPreviousMonth && !$bNextMonth) {
            $sClass = 'current';
        }
        $sCalTblRows .= '<td class="'.$sClass.'"><a href="javascript: void(0)">'.$iCurrentDay.'</a></td>';
 
        // Следующий день
        $iCurrentDay++;
        if ($bPreviousMonth && $iCurrentDay > $iPrevDaysInMonth) {
            $bPreviousMonth = false;
            $iCurrentDay = 1;
        }
        if (!$bPreviousMonth && !$bNextMonth && $iCurrentDay > $iDaysInMonth) {
            $bNextMonth = true;
            $iCurrentDay = 1;
        }
    }
    $sCalTblRows .= '</tr>';
}
 
// Готовим замену ключей и генерируем календарь
$aKeys = array(
    '__prev_month__' => "{$iPrevMonth}-{$iPrevYear}",
    '__next_month__' => "{$iNextMonth}-{$iNextYear}",
    '__cal_caption__' => $sMonthName . ', ' . $iYear,
    '__cal_rows__' => $sCalTblRows,
);
$sCalendarItself = strtr(file_get_contents('templates/calendar.html'), $aKeys);
 
// AJAX-запрос – выводит календарь
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] =='XMLHttpRequest' && isset($_GET['month'])) {
    header('Content-Type: text/html; charset=utf-8');
    echo $sCalendarItself;
    exit;
}
 
$aVariables = array(
    '__calendar__' => $sCalendarItself,
);
echo strtr(file_get_contents('templates/index.html'), $aVariables);
мне нужно что бы выводил предыдущий месяц.
СПС заранее!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2014, 13:15
Ответы с готовыми решениями:

Почему не выводится информация за предыдущий месяц
В Бд есть записи содержащие время (unix timestamp) и значение Пример time data...

Вывести календарь на текущий месяц в виде таблицы
Помогите решить задачу. Создайте скрипт,который выводил бы календарь на текущий месяц в виде...

DataTimePicker предыдущий месяц
Еще один легкий вопрос. Есть два DataTimePicker'a. Начальная дата и сегоднешняя. Задачка в том...

Отбор записей за предыдущий месяц
Добрый день, Форумчане! Кто с функциями Даты на ты? Каждый месяц при изготовлении отчета захожу в...

2
207 / 199 / 110
Регистрация: 27.12.2010
Сообщений: 819
Записей в блоге: 1
19.06.2014, 19:50 2
3 строку сделай такой:
PHP
1
list($iNowYear, $iNowMonth, $iNowDay) = explode('-', date('Y-').(date('m')-1).date('-d'));
0
2 / 2 / 2
Регистрация: 01.12.2010
Сообщений: 264
20.06.2014, 08:58  [ТС] 3
не, не само число, а месяц сам.
Т.е. При обновлении страницы он мне не июнь показывал, а май. А число путь остается таким же.
0
20.06.2014, 08:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 08:58
Помогаю со студенческими работами здесь

Вывести данные за предыдущий месяц
Доброго времени суток. Есть таблица с показаниями счетчика воды. Чтобы узнать показания на текущий...

Как вывести дату за предыдущий месяц в виде 06/15 ?
Подскажите как вывести дату за предыдущий месяц в виде 06/15????

Добавление в архив файлов за предыдущий месяц с заданными исключениями
Добрый день. есть большое количество файлов, имя задаётся по виду: 20120701_xxx 20120702_yyy...

Календарь меняет месяц
Код ниже ведёт себя странно... не понимаю почему: public static void main (String args)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru