この記事には次の内容が含まれています:
1. 現在の日付と時刻を取得する方法は何通りありますか?
2. 日付の表示方法を変更します - 日付と時刻の表示形式を変更します
3. 現在の日付を Unix タイムスタンプ値に変換します
a. 時間を追加します
b. 時間を減算します
c. 2 つの日付の間の間隔を見つけます
5. PHP に DateAdd 関数を追加します
** 現在の日付と時刻を取得します
UNIX では、1970 年 1 月 1 日の 0:00 から経過した秒数を計算して時刻を表します。これを UNIX タイムスタンプ (Unix Epoch) と呼びます。
このようなコードがある場合:
?
echo time();
?
は値 958905820 を返します。
この時点の時刻は 2000 年 5 月 21 日です。時間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
Thisまさに私たちが望んでいることです。しかし、非常に複雑な文に日付と時刻を含める必要がある場合、各文字にエスケープ文字を使用する必要があるでしょうか?
答えはもちろんノーです。別の関数 strftime() を使用します。
strftime() には 2 つの利点があります。最初の利点は、この記事の範囲を超えています。setlocale() 関数を使用すると、strftime を通じて対応する言語で月の名前を取得できます。追加の利点は、文字列に特別な日付と時刻の書式設定文字を含めることができることです。これは、date() 関数の特殊な書式設定文字をすべて学習したいかどうかに関係なく、まったく異なる書式設定文字のセットを学習する必要があることも意味します。
Strftime() は、特殊な書式設定文字の前にパーセント記号 % を付ける必要があることを除いて、date() と同様に機能します。 strftime() 関数を使用する場合、前の例のコードは次のようになります。 ?
結果は次のようになります:
5 月 21 日日曜日 18 時 24 分
これは単純すぎるように思えるかもしれませんが、「今日は 2000 年 5 月 21 日の日曜日です。時刻は 18 時 24 分に近いと思います。」と表示する必要があるかどうかを検討してください。 date() 関数を使用するのは間違いなく面倒です。
冒頭で、Unix タイムスタンプ値から有用なデータを取得するには 2 つの方法があると述べました。 date() と strftime() について学びました。別の getdate() 。この関数にはパラメータとして Unix タイムスタンプ値のみが必要で、関数の戻り値は日付と時刻の配列です。
以下は例です:
$date_time_array = getdate (time());
echo $date_time_array[ "weekday"]
?
日曜日
"weekday" を除く、配列の他の部分は次のとおりです:
"秒" - 秒
"分" - 分
"時間" - 時間
"mday" - this Day of the month
"wday" - 曜日 (数値)
"mon" - 月 (数値)
"year" - 年
"yday" - 今年の月の日 (数値)
「月」 - 月の完全な名前
簡単に識別できる日付と時刻を取得できるようになりました。他の人はどうですか?
**現在の日付を 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 からの文字列
$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;
$date_time_array( $timestamp);
// mktime() 関数を使用して 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;
$date_time_array( $タイムスタンプ);
$時間 = $date_time_array["分"];
$秒 = $date_time_array[ "秒"]; month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
// 関数は再生成しますUnix タイムスタンプ値
$timestamp = mktime($hours ,$ minutes, $month ,$day,$year);
echo $timestamp;
? getdate() によって生成されたデータは、対応する name 変数に入れられるため、コードは比較的読みやすく、理解しやすくなります。現在の時刻に 19 時間を追加する必要がある場合は、mktime() 関数で $hours の代わりに $hours 19 を使用します。 mktime() は時間を自動的に次の日に移動させます。
?
//現在のタイムスタンプ値を配列に入れます
$timestamp = time();
echo strftime( "%Hh%M %A %d %b",$ timestamp);
echo "p";
$date_time_array = getdate($timestamp);
$ minutes = $date_time_array["分"] ; >$秒 = $date_time_array["秒"];
$month = $date_time_array["月"];
$day = $date_time_array["mday"]; year"];
// mktime() 関数を使用して Unix タイムスタンプ値を再生成します
// 19 時間を追加します
$timestamp = mktime($hours 19, $ minutes,$秒,$ month, $day,$year);
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "19 時間追加後"
? >実行後、次の結果が得られます:
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 は、時間間隔を表す文字列式です。分や日など、加算される時間間隔の数を表す数値です。Date は日付を表します。
間隔 (時間間隔文字列式) は、次のいずれかの値です:
yyyy 年
q 四半期
m 月
y 年間
d 日
w 平日週の日数
ww 年の週
h 時
n 分
s 秒
w、y、d の関数はまったく同じです。つまり、1 日を加算します。現在の日付に 3 か月を追加し、q に 3 か月を追加し、ww に 7 日を追加します。
?
関数 DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$hours = $date_time_array["hours"];分 = $date_time_array["分"];
$秒 = $date_time_array["秒"];
$月 = $date_time_array["月"]; ];
$year = $date_time_array["year"];
switch ($interval) {
case "yyyy": $year =$number
case "q";月 =($number*3); ブレーク
ケース "m": $month =$number;
ケース "d":
ケース "w" : $day =$number; ブレーク;
case "ww": $day =($number*7);
case "h": $hours =$number; n": $分 =$number; ブレーク;
case "s": $秒 =$number; ブレーク;
}
$timestamp = mktime($時間,$分, $秒,$月,$day, $year);
return $timestamp;}
?
上記のコードを dateadd.inc ファイルとして保存し、次のコードを実行します。 ( 'dateadd.inc');
$temptime = time();
echo strftime( "%Hh%M %A %d %b",$temptime); n " ,50,$temptime);
echo "p";
echo strftime( "%Hh%M %A %d %b",$temptime);
?
:
15:41 Saturday 03 Jun
16:31 Saturday 03 Jun
PHP に DateDiff 関数を追加
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( $時間差 ,604800); ブレーク;
ケース "d": $retval = bcdiv($timedifference,86400);
ケース "h": $retval = bcdiv ($timedifference); 🎜>ケース "n": $retval = bcdiv($timedifference,60);
ケース "s": $retval = $timedifference;
>?
上記のコードを datediff.inc ファイルとして保存し、次のコードを実行します。
$currenttime = time();
echo "現在の時刻: ".strftime("%Hh%M %A %d %b" ,$currenttime)."br"; ("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 プログラムに適用する方法だけです。