現時点 2000年5月21日12時43分現在。 これはかなり良いと言えるかもしれません。これではまったく役に立たない、またはほんの少ししか役に立たないとき。 PHP では、すべての日付処理関数で time() によって返されるタイムスタンプ値を使用する必要があります。同時に、PHP は Unix と Windows システムの両方で同じタイムスタンプ値を使用するため、コードを変更せずに異なるシステム間で PHP を移植できます。もう 1 つの利点は、time() 関数が整数を返すため、特別な日付/時刻フィールドを使用せずに、整数フィールドまたはテキスト フィールドとしてデータベースに格納できることです。
PHP には、Unix タイムスタンプ値を有用なデータに変換する 2 つのメソッドが用意されています。 1 つ目は date() 関数です。この関数は 2 つのパラメータを取ります。最初の文字列は返したい形式を設定するために使用され、2 番目の文字列は Unix タイムスタンプ値です。
書式文字列では、単純な特殊な書式文字を使用して、表示したい形式で日付と時刻を表示します。日付を「18:01 Sunday 21 May」という形式で表示したいとします。
文字列の各部分に特別な書式設定文字を使用する必要があります。これは、PHP マニュアルの日付と時刻関数ライブラリから見つけることができます。このような特殊な書式設定文字は、曜日、月の英語名、2 桁または 4 桁で表される年、午前 (AM) か午後 (PM) などを表します。この例に必要な特殊文字は次のとおりです:
もう 1 つの利点は、文字列に特別な日付と時刻の書式設定文字を含めることができることです。これは、date() 関数の特殊な書式設定文字をすべて学習したいかどうかに関係なく、まったく異なる書式設定文字のセットを学習する必要があることも意味します。
strftime() は、特殊な書式設定文字の前にパーセント記号 % を付ける必要があることを除いて、date() と同じように機能します。 strftime() 関数を使用する場合、前の例のコードは次のようになります。
結果は次のとおりです:
5月21日日曜日18時24分
これは単純化しすぎているように思えるかもしれませんが、必要なのは
「今日は2000年5月21日日曜日です。時刻は18時24分に近いと思います。」
日付を使用すると思います。 ) 関数は間違いなく迷惑です。
冒頭で、Unix タイムスタンプ値から有用なデータを取得するには 2 つの方法があると述べました。 date() と strftime() について学びました。別の getdate() 。この関数にはパラメータとして Unix タイムスタンプ値のみが必要で、関数の戻り値は日付と時刻の配列です。
以下は例です:
コードをコピーします コードは次のとおりです:
$date_time_array = getdate (time());
echo $date_time_array[ "weekday"]; ?>;
返される結果は次のとおりです:
Sunday
"weekday" を除く、配列の他の部分は次のとおりです:
"seconds" - 秒
" minutes" - 分
"hours" - 時間
"mday " - 月の日 Day
「wday」 - 曜日 (数字)
「mon」 - 月 (数字)
「year」 - 年
「yday」 - r年の日 (数字)
"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"
// 文字列を日付、時刻、午前の 3 つの部分に分解します。 PM
$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"; Unix タイムスタンプ値を再生成する mktime() 関数
$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 $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,$ minutes, $seconds,$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); $hours = $date_time_array["hours"];
$ minutes = $date_time_array["分"] ;
$秒 = $date_time_array["月"];
$日 = $日付_時刻_配列["年"]; // mktime() 関数を使用して Unix タイムスタンプ値を再生成します
// 19 時間を追加します
$timestamp = mktime($hours + 19, $ minutes,$秒 ,$month, $day,$year);
echo strftime ( " %Hh%M %A %d %b",$timestamp);
echo "19 時間追加後の br~E"
?>
実行後、次のようになります:
6 月 3 日土曜日 14 時 58 分6 月 4 日日曜日 09 時 58 分
~19 時間追加後の E
時間の短縮にも同じことが当てはまります。対応する変数の値を減らすだけで済みます。
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 日を加算します。
コードをコピーします
コードは次のとおりです:
function DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$hours = $date_time_array ["時間"];
$分 = $date_time_array["秒"];
$月 = $date_time_array[" mday"] ;
$year = $date_time_array["year"]; switch ($interval) { case "yyyy": $year +=$number; Break; case "q": $month +=($数値 *3 ); ケース "m": $month +=$number;
case "d": $day+=$number; "ww" : $day+=($number*7);
case "h": $hours+=$number;
case "s": $秒+= $休憩;
$タイムスタンプ = mktime($時間,$分, $月,$日, $年);
;
上記のコードを dateadd.inc ファイルとして保存し、次のコードを実行します:
コードをコピーします コードは次のとおりです:
<
include('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 Saturday 03 Jun
16h31 Saturday 03 Jun
Add DateDiff function for PHP
DateAdd は完了しましたが、DateDiff はどうなるのでしょうか?
ドキュメントによると、DateDiff(interval, date1, date2) 関数は「2 つの日付の間の時間間隔を返す」と定義されています。
Intervals パラメーターの使用方法は、DateAdd 関数の場合と同じです。過度の複雑さを避けるために、Vbscript の DateDiff 関数の他の複雑なパラメーター、つまり 2 つのオプションのパラメーター変数 [firstdayofweek[, firstweekofyear]] (これらは、週の最初の日が日曜日か日曜日かを判断するために使用されます) を無視することにしました。月曜日と年の最初の週の定数。間隔には次の 5 つの値のみが許可されます: "w" (週)、"d" (日)、"h" (時間)、"n" (分) . と "s" (秒)
何が考えられるか見てみましょう: 次のコードが必要です:
コードは次のとおりです: ($interval , $date1,$date2) {
// 2 つの日付の間の秒数を取得します
$timedifference = $date2 - $date1;
switch ($interval) {
case "w": $retval = bcdiv( $timedifference ,604800);
case "d": $retval = bcdiv($timedifference,86400);
case "n" ": $retval = bcdiv( $timedifference,60); Break;
case "s": $retval = $timedifference; Break;
}
return $retval;}
?>;
上記のコードを次の名前で保存しますdatediff .inc ファイルを開き、次のコードを実行します。
コードをコピーします。 コードは次のとおりです。
include('dateadd.inc'); '); $currenttime = time(); echo "現在の時刻: ".strftime("%Hh%M %A %d %b" ,$currenttime)."br"; ",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/322867.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/322867.html
技術記事以前に ASP を使用したとき、この問題は非常に簡単に解決できました。ASP には、2 つの日付の間の月数、日数、および秒数を与えることができる対応する関数 DateDiff がありました。 PHPマニュアルを検索したところ、見つけました...