ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルの日付処理メソッドのコレクション
この記事には次の内容が含まれています:
1. 現在の日付と時刻を取得する方法は何通りありますか?
2. 日付の表示方法を変更します - 日付と時刻の表示形式を変更します
4. 日付を変更します
a. 時間を加算します
c. 2 日付間の間隔
5. PHP の DateAdd 関数を追加
**現在の日付と時刻を取得します
Unix では、時間は 1970 年 1 月 1 日から計算されて表現されます。ゼロ時刻から経過したデータ、これを UNIX タイムスタンプ (Unix エポック) と呼びます。
次のようなコードがある場合:
?
echo time();
は値 958905820 を返します
この時点の時刻は 2000 年 5 月 21 日の 12:43 です。
これはかなり良いと言えるかもしれません。これではまったく役に立たない、またはほんの少ししか役に立たないとき。 PHP では、すべての日付処理関数で time() によって返されるタイムスタンプ値を使用する必要があります。同時に、PHP は Unix と Windows システムの両方で同じタイムスタンプ値を使用するため、コードを変更せずに異なるシステム間で PHP を移植できます。もう 1 つの利点は、time() 関数が整数を返すため、特別な日付/時刻フィールドを使用せずに、整数フィールドまたはテキスト フィールドとしてデータベースに格納できることです。
Unix タイムスタンプ値の基本は理解できたので、実際にそれを示してみましょう。
日付の表示方法を変更する - 日付と時刻の表示形式
PHP には、Unix タイムスタンプ値を有用なデータに変換する 2 つの方法が用意されています。 1 つ目は date() 関数です。この関数は 2 つのパラメータを取ります。最初の文字列は返したい形式を設定するために使用され、2 番目の文字列は Unix タイムスタンプ値です。
書式文字列では、単純な特殊な書式文字を使用して、表示したい形式で日付と時刻を表示します。日付を「18:01 Sunday 21 May」という形式で表示したいとします。
文字列の各部分に特別な書式設定文字を使用する必要があります。これは、PHP マニュアルの日付と時刻関数ライブラリから見つけることができます。このような特殊な書式設定文字は、曜日、月の英語名、2 桁または 4 桁で表される年、午前 (AM) か午後 (PM) などを表します。この例に必要な特殊文字は次のとおりです:
'H' - 24 時間制の時間
'i' - 分
'l' - 曜日の完全な英語名
'd' -月の日
' F' - 月の完全な英語名
したがって、形式文字列は「Hhi l d F」であり、PHP コードは次のようになります:
?echo date ("Hhi l d F" ,time() );
?
このコードを実行すると、次の結果が得られます。
180609 5 月 21 日日曜日
この結果は少し奇妙に見えます。もう一度 PHP のマニュアルを確認してみましょう。「h」は 12 時間制の時間を表していることがわかります。これは再び真実を証明します。「コンピューターは、ユーザーが実行してほしいことを実行するのではなく、ユーザーが実行するよう指示したことだけを実行します。」選択肢は 2 つあります。最初の方法は、h の前にエスケープ文字 "" を使用することです:
echo date ("Hhi l d F", time());
次の結果が得られます:
18h12 Sunday 21 May
これはまさに私たちが望んでいることです。しかし、非常に複雑な文に日付と時刻を含める必要がある場合、各文字にエスケープ文字を使用する必要があるでしょうか?
答えはもちろんノーです。別の関数 strftime() を使用します。
strftime() には 2 つの利点があります。最初の利点は、この記事の範囲を超えています。setlocale() 関数を使用すると、strftime を通じて対応する言語で月の名前を取得できます。追加の利点は、文字列に特別な日付と時刻の書式設定文字を含めることができることです。これは、date() 関数の特殊な書式設定文字をすべて学習したいかどうかに関係なく、まったく異なる書式設定文字のセットを学習する必要があることも意味します。
strftime() は、特殊な書式設定文字の前にパーセント記号 % を付ける必要があることを除いて、date() と同じように機能します。 strftime() 関数を使用する場合、前の例のコードは次のようになります。
?echo strftime ("%Hh%M %A %d %b" ,time()); 結果は次のようになります。
18h24 Sunday 21 May
これは単純すぎるように思えるかもしれませんが、「今日は 2000 年 5 月 21 日の日曜日です。時刻は 18 時 24 分に近いです。」と表示する必要がある場合は、date() 関数を使用するのは間違いなく退屈だと思います。
冒頭で、Unix タイムスタンプ値から有用なデータを取得するには 2 つの方法があると述べました。 date() と strftime() について学びました。別の getdate() 。この関数にはパラメータとして Unix タイムスタンプ値のみが必要で、関数の戻り値は日付と時刻の配列です。
以下は例です:
$date_time_array = getdate (time());
echo $date_time_array[ "weekday"];
「平日」を除く、配列の対象:
"秒" - 秒
"分" - 分
"hours" - 時間
"mday" - 月の日
"wday" - 曜日 (数値)
"mon" - 月(数値)
"year" - 年
"yday" - rThe day (数値)
"month" - 月の完全名
簡単に識別できる日付と時刻を取得できるようになりました。他の人はどうですか?
**現在の日付を Unix タイムスタンプ値に変換します
通常、データは何らかの日付または時刻形式で処理する必要があります。 M$ の Access データベースを開きます。すべての日付は YYYY/MM/DD の形式で保存されます。現在の日付を追加すると、2000/05/27 になります。 Mktime() 関数は、時間を Unix タイムスタンプ値に変換できます。
関数の形式は次のとおりです: int mktime(int 時間、int 分、int 秒、int 月、int 日、int 年、int [is_dst]);
左から右に、時、分、秒、月を指定する必要があります。 、何日も何年も。最後のパラメータは、夏時間であるかどうかを指定するために使用されます。このパラメータはオプションであるため、無視します。
コードは次のとおりです:
?echo mktime (0, 0,0,5, 27,2000);
時間、分、秒を同時に入力する必要があることがわからないので、 0に設定してみました。 0 に設定すると、時刻が午前 0 時であることを意味します。
?
$access_date = "2000/05/27";
//explode() 関数は、1 つの文字列を境界として使用して、別の文字列を分解します。この例では、$access_date は文字列 "/" で分解されます
$date_elements =explode("/" ,$access_date);
// この時点では
// $date_elements[0] = 2000
// $date_elements[1] ] = 5
// $date_elements[2] = 27
echo mktime (0, 0,0 ,$date_elements [1], $date_elements[2],$date_elements [0]
); 比較してみましょうAccess データベースから単純に日付を取得するより複雑なケースでは、次の形式で日付と時刻を取得します。 2000/05/27 02:40:21 PM
//Access からの文字列
$date_time_string = " 2000/05/27 02 :40:21 PM";
// 文字列を日付、時刻、AM/PM の 3 つの部分に分解します
$dt_elements =explode(" " ,$date_time_string);
// 日付を分解します
$date_elements =explode(" /" ,$dt_elements[ 0]);
// 分解時間
$time_elements =explode(":" ,$dt_elements[ 1]); 午後の場合は、時間を 12 時間換算して 24 時間制の時刻を取得します
if ($dt_elements [2]== "PM") { $time_elements[ 0]+=12;}
// 出力結果
echo mktime ($time_elements [0 ], $time_elements[1], $time_elements [2], $date_elements[1], $date_elements[2], $date_elements[0]);
**時刻を知る必要がある場合があります。それは 6 時間後、35 日前の日付、または最後に Quake 3 をプレイしてから何秒経過したかです。 mktime() 関数を使用して、別の日付と時刻から Unix タイムスタンプ値を取得する方法はすでに知っています。現在の日付と時刻以外の Unix タイムスタンプ値が必要な場合はどうすればよいでしょうか?次に何を行うかを説明するのに役立ついくつかの演習を示します。
前に見たように、mktime() は次のパラメータを取ります: 時、分、秒、月、日、年。セクション 2 について考えてください。getdate() 関数はこれらのパラメーターを取得できます。
?
// 現在のタイムスタンプ値を配列に代入します
$timestamp = time();
echo "p";
$date_time_array = getdate( $timestamp); Unix タイムスタンプ値を再生成します
$timestamp = mktime($date_time_array ["hours"], $date_time_array[" minutes" ],$date_time_array[ "秒"],$date_time_array ["mon"], $date_time_array[ "mday" ], $date_time_array[ "year"]);
echo $timestamp;
少しわかりにくいですね。上記のプログラムを理解しやすくするために、いくつかの変数を使用します。
?
// 現在のタイムスタンプ値を配列に代入します
$timestamp = time();
echo "p";
$date_time_array = getdate( $timestamp);時間"];
$分 = $date_time_array["分"];
$秒 = $date_time_array[ "秒"];
$月 = $date_time_array["月"];
$日 = $date_time_array[ "mday" ];
$year = $date_time_array["year"];
// mktime() 関数を使用して Unix タイムスタンプ値を再生成します
$timestamp = mktime($hours,$months,$day, $year);
echo $timestamp;
? ここで、getdate() によって生成されたタイムスタンプ値を、対応する name 変数に入れることで、コードが比較的読みやすく、理解しやすくなります。現在の時刻に 19 時間を追加する必要がある場合は、mktime() 関数で $hours の代わりに $hours+19 を使用します。 mktime() は時間を自動的に次の日に移動させます。
?//現在のタイムスタンプ値を配列に入れます
$timestamp = time();
echo strftime( "%Hh%M %A %d %b",$timestamp); date_time_array = getdate($timestamp);
$hours = $date_time_array["分"];
$秒 = $date_time_array["秒"]; ["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// Unix タイムスタンプ値を再生成する
//時間
$timestamp = mktime($hours + 19, $分,$秒 ,$月, $日,$年);
echo strftime( "%Hh%M %A %d %b",$timestamp) ; echo "19 時間追加後の br~E"
実行後、次のようになります:
14h58 Saturday 03 Jun
09h58 Sunday 04 Jun
~E 19 時間追加後
時間を短縮する場合も同様です。対応する変数を減らす この値で十分です。
2 つの異なる時間値の差を取得することも非常に簡単です。必要なのは、2 つの時刻値を Unix タイムスタンプ値に変換し、その 2 つを減算することだけです。 2 つの時間の差は、2 つの時間の間の秒数です。他のアルゴリズムでは、秒を日、時間、分、秒にすばやく変換できます。
**PHP に DateAdd 関数を追加します
記事の冒頭で述べたように、この記事を書いた理由は、PHP で ASP に似た DateDiff 関数が見つからないためです。 PHP が日付と時刻を処理する方法を紹介した後、ASP で一般的に使用される 2 つの関数を PHP に移植しましょう。最初の関数は DateAdd です。
Vbscript のドキュメントによると、DateAdd(interval,number,date) 関数は、「指定された時間間隔を加算した日付を返す」と定義されています。
Inetrval は、追加される時間間隔を表す文字列式です。分または日として、数値は追加される時間間隔の数を表す数値式です。日付は日付を表します。
Interval (時間間隔の文字列式) は、次の値のいずれかになります:
yyyy year
q Quarter
m Month
y Day of year
d Day
w Weekday
ww Week of year
h Hour
n Minute
s Second w、y、d の関数はまったく同じです。つまり、現在の日付に 1 日を加算し、q は 3 か月を加算し、ww は 7 日を加算します。
関数 DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$ minutes = $date_time_array["分"];
$秒 = $date_time_array["秒"];
$月 = $date_time_array["月"];
$年 = $date_time_array["年"]; ($interval) {
case "yyyy": $year +=$number ブレーク;
case "q": $month +=($number*3);番号; ケース "y":
ケース "w": $day+=($number*7); "h": $時間+=$数値;
ケース "n": $秒+=$数値; ,$ minutes, $seconds,$month,$day, $year);
return $timestamp;}
? 上記のコードを dateadd.inc ファイルとして保存して、次のコードを実行できます:
? (' dateadd.inc');
$temptime = time();
echo strftime( "%Hh%M %A %d %b",$temptime);
$temptime = DateAdd("n" ,50,$) temptime) ;
echo Strftime ("%HH%M%A%D%B", $ Temptime)
を取得します:
15H41 6 月 3 日土曜日
datediff を追加しますPHP 関数
DateAdd が完成したので、DateDiff はどうすればよいでしょうか?
ドキュメントによると、DateDiff(interval, date1, date2) 関数は「2 つの日付の間の時間間隔を返す」と定義されています。
Intervals パラメーターの使用法は、DateAdd 関数での使用法と同じです。過度の複雑さを避けるために、Vbscript の DateDiff 関数の他の複雑なパラメーター、つまり 2 つのオプションのパラメーター変数 [firstdayofweek[, firstweekofyear]] (これらは、週の最初の日が日曜日か日曜日かを判断するために使用されます) を無視することにしました。月曜日と年の最初の週の定数。間隔には次の 5 つの値のみが許可されます: "w" (週)、"d" (日)、"h" (時間)、"n" (分) . と "s" (秒)
何が考えられるか見てみましょう: 次のコードが必要です:
? Function DateDiff ($interval, $date1,$date2) {
// 2 つの日付を取得します。間の秒数
$timedifference = $date2 - $date1;
switch ($interval) {
case "w": $retval = bcdiv($timedifference,604800);
case "d": $retval = bcdiv($timedifference,86400); ブレーク;
case "h": $retval = bcdiv ($timedifference,3600); "s": $retval = $timedifference;
}
return $retval;}
?
上記のコードを datediff.inc ファイルとして保存し、次のコードを実行します。 ');
include('dateadd.inc');
$currenttime = time();
echo "現在の時刻: ".strftime("%Hh%M %A %d %b" ,$currenttime) ";
$newtime = DateAdd ("n",50 ,$currenttime);
echo "時間プラス 50 分: ".strftime("%Hh%M %A %d %b" ,$newtime)."br" ;
$temptime = DateDiff ("n",$currenttime ,$newtime);
echo "2 つの時刻の間の間隔: ".$temptime;
すべてがうまくいけば、次の結果が表示されます。 6 月 3 日土曜日 16 時 23 分
時間プラス 50 分: 6 月 3 日土曜日 17 時 13 分
2 つの時間の間隔: 50
Unix マシンで PHP を実行している場合は、BC 高精度関数をサポートするように PHP をコンパイルする必要があります。次のアドレス http://www.php.net/extra/number4.tar.gz から BC ライブラリをダウンロードし、PHP4 のルート ディレクトリに解凍し、PHP を再コンパイルして、コンパイル時に --enable- を追加する必要があります。 bcmath のオプション。 (詳細な手順については、PHP4 の README.BCMATH を参照してください)。 Windows 版 PHP4 では、BC の高精度関数をパッチなしで直接使用できます。
日付と時刻を処理する関数ができたので、あとはそれを PHP プログラムに適用する方法だけです
http://www.bkjia.com/PHPjc/317664.html
www.bkjia.com