PHP生成日曆(例項詳解)
《PHP典型模組與專案實戰大全》第9章日程表模組(PHP+AJAX+XML),本章通過課程表模組的實現將AJAX技術介紹給讀者,讀者可以通過本章瞭解到AJAX的基本原理、PHP與AJAX是如何互動的,以及通過資料庫驅動的AJAX。本節為大家介紹PHP生成的日曆。
AD:
9.4 日曆程式設計
日程表的前端程式的核心是,通過PHP指令碼生成一個當前日期的日曆表格,再通過遍歷資料中的訊息事件,在有事件提醒的日期生成一個有"event"標識的連結,單擊該連結就可以非同步將對應的提醒資訊顯示在日曆表格的下方。
9.4.1 PHP生成的日曆
PHP生成日曆是這個模組邏輯上最複雜的部分,下面來看如何生成一個標準的日曆。日曆展示的部分是將星期和日期通過一張二維表格輸出到瀏覽器中的。日曆表格的形式如圖9.6所示。
圖9.6 日曆表格樣式 |
現在以2010年6月14日為例說明。6月份共有30天,在這個日曆表中共5行,首先需要確定當前所在的日期(當然也可以指定一個日期),比如14日,通過表格可以知道它在第3行對應星期一那列(第3周)。通常每個月第1天不是在表格開始的位置,位置並不固定,同樣不固定的還有每個月的週數,有時候是4周,有時候是5周。這樣,想要完成這個日曆表格就需要確定一些基礎的日期變數,下面具體來看需要設定的基礎變數。
PHP提供了date()函式,該函式提供了豐富的日期處理功能。現在需要獲得的資料有兩個,第一個是當月的總天數;第二個是該月的第一天所在星期中的第幾天,數字表示0(表示星期天)到6(表示星期六)。通過date()函式可以很容易獲得上面的資料。
- <?php
- //date()函式的基本用法
- $year = date('Y'); //獲得年份,例如2006
- $month = date('n'); //獲得月份,例如04
- $day = date('j'); //獲得日期,例如3
- ?>
- //獲得當月的總天數
- $daysInMonth = date("t",mktime(0,0,0,$month,1,$year));
- //獲得每個月的第一天,例如4
- $firstDay = date("w", mktime(0,0,0,$month,1,$year));
現在重新來觀察下這個日曆表格,我們發現,表格中的值是從1到x(當月的總天數)。我們可以形象地通過一個座標來表示每一個位置(x,y),表格的起始位置是(0,0),結束位置是(5,4),當月第一天的起始位置是(0,3)。現在來建立一個二維陣列來儲存對應的日期。
(1)需要獲得表格的數目。
- //計算陣列中的日曆表格數
- $tempDays = $firstDay + $daysInMonth;
- //獲得表格行數
- $weeksInMonth = ceil($tempDays/7);
- <?php
- for($j=0;$j<$weeksInMonth;$j++)
- {
- for($i=0;$i<7
- ;$i++)
- {
- $counter ++;
- $week [$j] [$i] = $counter;
- }
- }
- ?>
- <?php
- //建立日期二維陣列
- for($j = 0; $j < $weeksInMonth; $j ++) {
- for($i = 0; $i < 7; $i ++) {
- $counter ++;
- $week [$j] [$i] = $counter;
- //日期偏移量
- $week [$j] [$i] -= $firstDay;
- if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
- $week [$j] [$i] = "";
- }
- }
- }
- ?>
- <?php
- $year = date ( 'Y' ); //獲得年份, 例如: 2006
- $month = date ( 'n' ); //獲得月份, 例如: 04
- $day = date ( 'j' ); //獲得日期, 例如: 3
- $firstDay = date ( "w", mktime ( 0, 0, 0, $month, 1, $year ) );
- //獲得當月第一天
- $daysInMonth = date ( "t", mktime ( 0, 0, 0, $month, 1, $year ) );
- //獲得當月的總天數
- //echo $daysInMonth;
- $tempDays = $firstDay + $daysInMonth; //計算陣列中的日曆表格數
- $weeksInMonth = ceil ( $tempDays/7 ); //算出該月一共有幾周(即表格的行數)
- //建立一個二維陣列
- for($j = 0; $j < $weeksInMonth; $j ++) {
- for($i = 0; $i < 7; $i ++) {
- $counter ++;
- $week [$j] [$i] = $counter;
- //offset the days
- $week [$j] [$i] -= $firstDay;
- if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
- $week [$j] [$i] = "";
- }
- }
- }
- ?>
- <script type="text/JavaScript" src="calendar.js"></script>
- <table width="400" border="1" cellpadding="2" cellspacing="2">
- <tr>
- <th colspan='7'>
- <?php
- echo date ( 'M', mktime ( 0, 0, 0, $month, 1, $year ) ) . ' ' . $year;
- ?>
- </th>
- </tr>
- <tr>
- <th>Sun</th>
- <th>Mon</th>
- <th>Tue</th>
- <th>Wed</th>
- <th>Thur</th>
- <th>Fri</th>
- <th>Sat</th>
- </tr>
- <?php
- foreach ( $week as $key => $val ) {
- echo "<tr>";
- for($i = 0; $i < 7; $i ++) {
- echo "<td align='center'>" . $val [$i] . "</td>";
- }
- echo "</tr>";
- }
- ?>
圖9.7 PHP生成日曆 |
來源:http://blog.sina.com.cn/s/blog_8a18c33d010158p3.html
相關文章
- SQL生成日曆SQL
- PHP7 新增功能詳解(例項)PHP
- PHP類和物件函式例項詳解PHP物件函式
- PHP函式處理函式例項詳解PHP函式
- curl例項詳解
- sudo 詳解+例項
- PHP 觀察者模式應用場景例項詳解PHP模式
- PHP的時間日期與例項應用:日曆核心程式PHP
- 元件例項 $el 詳解元件
- Crontab例項-命令詳解
- tcl/tk例項詳解——glob使用例解
- php計算多個集合的笛卡爾積例項詳解PHP
- Laravel中使用Carbon時間類生成日曆Laravel
- 【例項】PowerQuery的自定義日曆
- JavaScript日曆效果程式碼例項JavaScript
- 並查集例項詳解並查集
- Oracle 例項恢復詳解Oracle
- JAVA例項 陰陽曆演算法(轉)Java演算法
- EventBus詳解及簡單例項單例
- CSS例項詳解:Flex佈局CSSFlex
- FTP命令詳解(含操作例項)FTP
- python閉包詳解(例項)Python
- .Net設計模式例項詳解設計模式
- 【函式】oracle translate() 詳解+例項函式Oracle
- linux中sleep詳解例項Linux
- php例項化物件的例項方法PHP物件
- 正規表示式之零寬斷言例項詳解【基於PHP】PHP
- js簡單日曆效果程式碼例項JS
- Spring事務管理(詳解+例項)Spring
- 50個典型電路例項詳解
- 閉包用法結合例項詳解
- Oracle阻塞(blockingblocked)例項詳解OracleBloC
- tcl/tk例項詳解——catch和errorError
- MySQL共享鎖:使用與例項詳解MySql
- PHP呼叫Webservice例項PHPWeb
- PHP-Socket服務端客戶端傳送接收通訊例項詳解PHP服務端客戶端
- 在 PHP 中生成日期陣列PHP陣列
- JavaScript簡單的日曆效果程式碼例項JavaScript