ホームページ  >  記事  >  バックエンド開発  >  PHP の第 8 弾に関する簡単な説明 --- PHP の date 関数を使用してカレンダーを出力する_PHP チュートリアル

PHP の第 8 弾に関する簡単な説明 --- PHP の date 関数を使用してカレンダーを出力する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:50:531051ブラウズ

皆さん、こんにちは。2 日前に RBAC [ロールベースのアクセス制御] の基本的な考え方を説明しましたが、その原理をすでに理解しているかどうか、そしてそれが使いやすいかどうかはわかりません。プロジェクトの開発中にこれを使用すると、上記で作成した RBAC クラスがプロジェクト開発に実際に適しているとは限りません。このクラスを作成する目的は、作業を理解することだけです。 RBAC の原理と使用法をさらに詳しく説明します ...
さて、すでに私が冗長だと思われたかもしれないので、これ以上ナンセンスなことは言いません。今日はそれを説明します。 既知の開始日と既知の終了日に基づいて、PHP の date 関数を使用して出力カレンダーを調べます。
日常生活において、カレンダーは私たちの生活や仕事に密接に関係しており、欠かせないものです。そのため、今日カレンダーについて説明した後、その日に完了するタスクを思い出すために電子カレンダーを作成してみるのも非常に興味深いです。 。
さて、まず date 関数について学びましょう。date 関数が現在の年、月、日を取得できることは皆さん知っていますが、date 関数の機能はこれに限定されません。公式の PHP マニュアルでパラメータを確認してみましょう。

フォーマット文字の説明戻り値の例
日 --- ---
d 日付、先頭にゼロを付けた 01 から 31 までの 2 桁の数字
D 曜日、テキスト表現、月曜から日曜までの 3 文字
j 月の日、先頭のゼロなし 1 ~ 31
l (「L」の小文字) 曜日、完全なテキスト形式 日曜日から土曜日まで
N ISO-8601 形式の数字で表される曜日 (PHP 5.1.0 で新たに追加) 1 (月曜日を意味します) ~ 7 (日曜日を意味します)
S 月の日の後の英語の接尾辞、2 文字 st、nd、rd、または th。 j
と一緒に使用できます w 曜日、数字は0(日曜日を意味します)から6(土曜日を意味します)を表します
z 西暦 0 から 366 まで
日曜日 --- ---
W ISO-8601 形式の年の週番号。各週は月曜日から始まります (PHP 4.1.0 で新たに追加されました) 例: 42 (年の 42 番目の週)
月 --- ---
F 月、完全なテキスト形式 (1 月または 3 月など) 1 月から 12 月まで
m 先頭にゼロを付けた数字で表される月 (01 から 12)
M は 1 月から 12 月までの 3 文字の略称です
n 月は先頭のゼロなしの数字で表されます 1 ~ 12
t 特定の月の日数 28 から 31 まで
年 --- ---
L うるう年ですか? うるう年なら1、そうでなければ0です
o ISO-8601 形式の年番号。これは Y と同じ値ですが、ISO 週番号 (W) が前年または翌年に属している場合は、その年が使用されます。 (PHP 5.1.0 の新機能) 例: 1999 または 2003
Y 4 桁の完全な年 例: 1999 または 2003
y 2 桁で表される年 例: 99 または 03
時間 --- ---
a 小文字の午前と午後の値 am または pm
大文字の午前と午後の値は AM または PM です
B スウォッチインターネット標準時間 000 ~ 999
g 時間、12 時間形式、先頭のゼロなし 1 ~ 12
G 時間、24 時間形式、先頭のゼロなし 0 ~ 23
h 時間、12 時間形式、先頭に 01 から 12 が付きます
H 時間、24 時間形式、先頭に 00 から 23 が付きます
i 先頭にゼロを付けた分 00 ~ 59>
s 秒、先頭にゼロ 00 ~ 59>
タイムゾーン --- ---
e タイムゾーン識別子 (PHP 5.1.0 で新たに追加) 例: UTC、GMT、大西洋/アゾレス諸島
I 夏時間かどうか。夏時間の場合は 1、それ以外の場合は 0 です
O グリニッジ標準時との時差 例: +0200
P とグリニッジ標準時 (GMT) の違い、時と分を区切るコロンがあります (PHP 5.1.3 で新たに追加されました) 例: +02:00
T このマシンが設置されているタイムゾーン 例: EST、MDT ([翻訳者注] Windows では「東部標準時」などの完全なテキスト形式ですが、中国語版では「中国標準時」と表示されます)。
Z 時差オフセット (秒単位)。 UTC より西のタイム ゾーン オフセットは常に負であり、UTC より東のタイム ゾーン オフセットは常に正です。 -43200から43200
完了日時 --- ---
c ISO 8601 形式の日付 (PHP 5 で新たに追加) 2004-02-12T15:19:21+00:00
r RFC 822 形式の日付 例: Thu, 21 Dec 2000 16:01:07 +0200
U Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの秒数

ご覧のとおり、PHP の date 関数は万能なので、date 関数を使用してカレンダーを作成してみましょう:
/*+----------------------------------------------- ----------------------------------------------------+
| カレンダー
+------------------------------------------------ ----------------------------------------+
| Copyright ランプ兄弟
+------------------------------------------------ ----------------------------------------+
| 著者: 李潔 (lijie@li-jie.me)
| 最終更新日: 2012-05-9 12:30
+------------------------------------------------ ----------------------------------------+
*/
クラス LampDate{
private $start_year // 開始年
private $start_month // 開始月
private $start_day //開始日
private $end_year //年末
private $end_month //月末
private $end_day //終了日
private $start_time; //開始時刻のタイムスタンプ
private $end_time; //終了時刻のタイムスタンプ
//週次テーブルのヘッダー配列を定義します
private $week = array("月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日");
//開始時刻の始まりのタイムスタンプ
プライベート $start;
// 開始時刻と月末のタイムスタンプ
プライベート $end;
//スタイルシートCSSファイルパス
プライベート $CSS;
//JSイベントファイルのパス
プライベート $script;
/**
* カレンダークラスの構築方法
* @param start_year 開始年
* @param start_month 開始月
* @param start_day 開始日
* @param end_year 年末
* @param end_month 月末月
* @param end_day 終了日
* @param CSS 出力日付スタイル
* @paramスクリプト 出力日イベント
*/
public function __construct($start_year='2012',$start_month='1',$start_day='1',$end_year='2012',$end_month='12',$end_day='31',$css=' style.css',$script='js.js'){
$this->start_year = $start_year //開始年に値を割り当てます
$this->start_month = $start_month //開始月に値を割り当てます
; $this->start_day = $start_day //開始日に値を代入します
$this->end_year = $end_year //終了年に値を代入します
$this->end_month = $end_month //終了月に値を割り当てます
; $this->end_day = $end_day //終了日に値を代入します
$this->css = $css; //指定された日付のCSS
$this->script = $script //指定された日付の JS イベント
//開始日のタイムスタンプを取得します
$this->start_time = strtotime($this->start_year."-".$this->start_month."-".$this->start_day);
//終了日のタイムスタンプを取得します
$this->end_time = strtotime($this->end_year."-".$this->end_month."-".$this->end_day);
//開始時刻の先頭のタイムスタンプを取得します
$this->start = strtotime($this->start_year."-".$this->start_month."-01");
// 月の開始時刻と月末のタイムスタンプを取得します
$this->end = strtotime($this->end_year."-".$this->end_month."-".date("t",$this->end_time));
//開始日から終了日までの日数を取得します
$this->day_count = (($this->end)-($this->start))/(24*60*60);
}
/**
* 月次テーブルのヘッダーを取得します
* @param i 月の初めからの日数
* @return テーブルヘッダーに戻ります --年--月
*/
プライベート関数 get_caption($i){
//空の文字列を定義します
$str ='';
$str.= "

";
$str.= "";
$str.= "";
//開始時刻の i 日目以降の年と月を取得します
$str.= date("Y",$this->start+($i*(24*60*60)))."年".date("m",$this->start+($i* (24*60*60)))."月";
$str.= "";
$str.= "
";
//テーブルヘッダーに戻る
$str;
を返します }
/**
* 月次週ヘッダーを出力する方法
* @return 週のヘッダーに戻ります
*/
プライベート関数 get_week(){
//空の文字列を定義します
$str='';
$str.= "";
for($w=0;$w //月曜日から日曜日まで出力をトラバースします
$str.= "";
}
$str.= "";
}
$str.= "";
//週の頭に戻る
$str;
を返します }
/**
* 月の先頭のスペースを埋めてください
* @param i 月初めから i 日目
* @return 完成したスペースを返します
*/
プライベート関数 get_space_front($i){
//空の文字列を定義します
$str='';
//月初からi日目が月曜日の場合、tr改行を出力
if(date("N",$this->start+($i*(24*60*60)))==1){
$str.= "";
}
// 月の初めから i 番目の日が月の最初の日の場合、出力スペースをトラバースします
if(date("d",$this->start+($i*(24*60*60)))==1){
// n 週目に、n-1 個のスペースを出力します
for($m=1;$mstart+($i*(24*60*60)));$m++){
$str.= "
";
}
}
//出力スペースを返します
$str;
を返します }
/**
*月末にスペースを埋めてください
* @param i 月初めから i 日目
* @return 完成したスペースを返します
*/
プライベート関数 get_space_back($i){
//空の文字列を定義します
$str='';
//開始時刻からi日目からの日数が月末の場合
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60* 60)))){
// n 週目に、7-n 個のスペースを出力します
for($w=date("N",$this->start+($i*(24*60*60)));$w $str.= "";
}
}
// 完成したスペースを返します
$str;
を返します }
/**
* 現在の日付を出力します
* @return 返却日
*/
プライベート関数 get_date($i){
//空の文字列を定義します
$str='';
//開始時刻からi日目が開始日の場合、背景色#7CCD7Cでテーブルを出力
if(date("Ymd",$this->start+($i*(24*60*60)))==$this->start_year.$this->start_month.$this->start_day) {
$str.= "";
// 出力日を返します
$str;
を返します }
/**
* 完了した空行を出力します
* @param i 月初めから i 日目
* @param t 1 か月あたりの出力行数
* @return 完成した空行を返します
*/
プライベート関数 get_rows($i,&$t){
//空の文字列を定義します
$str='';
//月初めから i 日目が日曜日の場合
if(date("N",$this->start+($i*(24*60*60)))==7){
//改行
$str.= "";
//月初めから i 日目が今月の最終日で日曜日の場合
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60* 60))) && date("N",$this->start+($i*(24*60*60)))==7){
//行数が減ります
$t--;
}
//行数がインクリメントされます
$t++;
}
//月初めから i 日目が今月の末日で、この時点の行数が 6 未満の場合
if(date("ymd",$this->start+($i*(24*60*60)))==date("ymt",$this->start+($i*(24*60* 60))) && $t while($t //改行出力開始
$str.= "";
for($n=1;$n // 7 つのスペースを出力します
$str.= "";
}
$str.= "";
//行数が1つ増えます
$t++;
}
}
//完成した空行を出力します
$str;
を返します }
/**
* テーブルの出力を終了します
* @param i 月初めから i 日目
* @param t 日付テーブルの行数
*@返却終了フォーム
*/
プライベート関数 get_endtab($i,&$t){
//空の文字列を定義します
$str='';
//開始日からi日目が今月の末日の場合
if(date("d",$this->start+($i*(24*60*60)))==date("t",$this->start+($i*(24*60* 60)))){
//終了フォームを出力
$str.= "
".$this->week[$w];
if($w==5 || $w==6){
//土曜日または日曜日の場合は、小さな休日アイコンを追加します
$str.= "
";
//開始時刻からi日目が終了日の場合、背景色#EE6363でテーブルを出力
}elseif(date("Ymd",$this->start+($i*(24*60*60)))==$this->end_year.$this->end_month.$this->end_day ){
$str.= "
";
//開始時刻からi日目が現在の日付の場合、背景色#EE2C2Cでテーブルを出力します
}elseif(date("ymd",$this->start+($i*(24*60*60)))==(date("ymd",time())){
$str.= "
";
//それ以外の場合は、背景色なしでテーブルを出力します
}その他{
$str.= "
";
}
//月初めからi日目の日付を出力します
$str.= date("j",$this->start+($i*(24*60*60)));
$str.= "
";
//そして行数カウンターを 1 に変更します
$t=1;
}
//終了フォームに戻る
$str;
を返します }
/**
* 出力月テーブルのスタイルとイベントを取得します
* @return 月テーブルのスタイルとイベントを返します
*/
プライベート関数 get_style(){
$str = "";
$str .= "";
// ファイルの内容を返します
$str;
を返します }
/**
* 日付フォームを取得します
* @param i 月初めから i 日目、デフォルトは 0 です
* @return 返却日表
*/
パブリック関数 get_datetab($i=0){
// スタイルとイベントを取得します
$str = $this->get_style();
// 開始日から終了日までの日数に基づいて日付の追跡を開始します
for($i=0,$t=1;$i<=$this->day_count;$i++){
//今月の1日なら
if(date("d",$this->start+($i*(24*60*60)))==1){
//ヘッダーを取得します
$str.=$this->get_caption($i);
//週のヘッダーを取得します
$str.=$this->get_week($i);
}
//テーブルの前のスペースを埋めてください
$str.=$this->get_space_front($i);
//日付を取得します
$str.=$this->get_date($i);
//テーブルの後ろのスペースを埋めてください
$str.=$this->get_space_back($i);
//日付テーブルの行数を定義します
$str.=$this->get_rows($i,$t);
//終了フォーム
$str.=$this->get_endtab($i,$t);
}
//日付テーブルを返す
$str;
を返します }
}


さらに完全なコメントを追加しました。何かわからない場合は、返信を残して質問することもできます。次の投稿で、誰もが遭遇する一般的な問題について詳しく説明します。お楽しみに。

出力効果:

ダウンロードして勉強できるようにコードを投稿します:

カレンダーコード date_class.rarhttp://bbs.lampbrother.net/job.php?action=download&aid=21095

作者 zdrjlamp

http://www.bkjia.com/PHPjc/478235.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/478235.html技術記事皆さん、こんにちは。2 日前に RBAC [ロールベースのアクセス制御] の基本的な考え方を説明しましたが、その原理を理解し、簡単に使用できるかどうかはわかりません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。