ホームページ  >  記事  >  php教程  >  PHPの日付関数の日付

PHPの日付関数の日付

WBOY
WBOYオリジナル
2016-06-21 08:51:151091ブラウズ

関数 date() を使用して
を実装します
表示形式:年-月-日 時:分:秒
関連する時間パラメータ:
a - 「午前」または「午後」
A - 「午前」または「午後」
d - 日、2 桁。2 桁未満の場合は、前にゼロを追加します。たとえば、「01」から「31」
。 D - 曜日、「Fri」などの 3 文字。 F - 月、完全な英語名 (例: "Monday"
) h - 12 時間制の時間 例: "01" から "12"
H - 24 時間形式の時間 例: "00" から "23"
g - 12 時間形式の時間。「1」から「12」
のように 2 桁未満の場合はゼロは追加されません。 G - 24 時間形式の時間。「0」から「23」など、2 桁未満の場合はゼロは追加されません。 i - 分 例: "00" から "59"
j - 日、2 桁。2 桁未満の場合は、ゼロを追加しないでください。たとえば、「1」から「31」
。 l - 曜日、完全な英語名(例: "Friday"
) m - 月、2 桁。2 桁未満の場合は、「01」から「12」のように先頭にゼロを追加します
。 n - 月、2 桁。2 桁未満の場合、ゼロは追加されません。たとえば、「1」から「12」
。 M - 月、「Jan」
などの 3 つの英語の文字。 s - 秒 例: "00" ~ "59"
S - 単語の末尾に英語の序数、「th」、「nd」
などの 2 つの英語の文字を追加します。 t - 指定した月の日数 (例: "28" ~ "31"
) U - 合計秒
w - 数値による曜日。例: "0" (日曜日) ~ "6" (土曜日)
Y - 年、4 桁の数字: "1999"
y - 年、「99」
などの 2 桁。 z - 年間の日 例: "0" から "365"
date("m-d H") や date("dmY");?> などの表示内容や接続記号、表示位置をphp
で自由に設定できます。 参加時間: 2004-12-18 17:35:22 サイズ: 12 KB 読み取り数: 1405 PHP での日付処理
再投稿: xiaxia 日付: 2004-05-26 人気: 9
PHP でヘルプ処理システムを作成する予定です。最後に顧客の問題に対応してからどれくらい時間が経ったのかを知る必要があることがわかりました。以前に ASP を使用したとき、この問題は非常に簡単に解決できました。ASP には、2 つの日付の間の月数、日数、秒数を与える対応する関数 DateDiff がありました。 PHP のマニュアルを検索したところ、PHP には同様の機能がないことがわかりました。
この記事には次の内容が含まれています:
1. 現在の日付と時刻を取得する方法は何通りありますか?
2. 日付の表示方法を変更する - 日付と時刻の表示形式
3. 現在の日付を Unix タイムスタンプ値
に変換します。 4. 日付を変更します
a. 時間を追加します
b. 時間を減算します
c. 2 つの日付間の間隔を見つけます
5. PHP に DateAdd 関数を追加
6. PHP に DateDiff 関数を追加
**現在の日付と時刻を取得します
Unix では、1970 年 1 月 1 日の 0:00 から経過した秒数を計算することで時刻を表現しており、これを UNIX タイムスタンプ (Unix Epoch) と呼びます。
次のようなコードがあるとします:
?
エコー時間();
?
値 958905820
が返されます この時の時刻は2000年5月21日12時43分。
それはかなり良いことだと言えるかもしれません。これがまったく役に立たない場合、またはほんの少ししか役に立たない場合。 PHP では、すべての日付処理関数で time() によって返されるタイムスタンプ値を使用する必要があります。同時に、PHP は Unix と Windows システムの両方で同じタイムスタンプ値を使用するため、コードを変更せずに異なるシステム間で PHP を移植できます。もう 1 つの利点は、time() 関数が整数を返すため、特別な日付/時刻フィールドを使用せずに、整数フィールドまたはテキスト フィールドとしてデータベースに格納できることです。
Unix タイムスタンプ値の基本を理解したので、実際にそれを示してみましょう。
日付の表示方法を変更する - 日付と時刻の表示方法を変更します
PHP には、Unix タイムスタンプ値を有用なデータに変換する 2 つの方法が用意されています。 1 つ目は date() 関数です。この関数は 2 つのパラメータを取ります。1 つ目は返したい形式を設定する文字列で、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 つあります。 1 つ目は、h の前にエスケープ文字「」を使用することです:
echo date ("Hhi l d F", time());
次の結果が得られます:
5月21日日曜日18時12分
これはまさに私たちが望んでいることです。しかし、非常に複雑な文に日付と時刻を含める必要がある場合、各文字にエスケープ文字を使用する必要があるでしょうか?
答えはもちろんノーです。別の関数 strftime() を使用します。
strftime() には 2 つの利点があります。最初の利点は、この記事の範囲を超えています。setlocale() 関数を使用すると、strftime を通じて対応する言語で月の名前を取得できます。追加の利点は、文字列に特別な日付と時刻の書式設定文字を含めることができることです。これは、date() 関数の特殊な書式設定文字をすべて学習したいかどうかに関係なく、まったく異なる書式設定文字のセットを学習する必要があることも意味します。
strftime() は、特殊な書式設定文字の前にパーセント記号 % を付ける必要があることを除いて、date() と同様に機能します。 strftime() 関数を使用する場合、前の例のコードは次のようになります:
?
echo strftime ("%Hh%M %A %d %b" ,time());
?
結果は次のようになります:
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」を除く、配列の他の部分は次のとおりです:
「秒」 – 秒
「分」 – 分
「時間」 – 時間
「mday」 - 月の日
"wday" - 曜日 (数字)
「mon」 - 月(数字)
「年」 – 年
"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";
// 文字列を日付、時刻、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 $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
// mktime() 関数を使用して Unix タイムスタンプ値を再生成します
$timestamp = mktime($date_time_array ["時間"], $date_time_array["分" ],$date_time_array[ "秒"],$date_time_array ["月"], $date_time_array["mday" ],$date_time_array[ "年"]);
echo $timestamp;
?
少し混乱しているようです。上記のプログラムを理解しやすくするために、いくつかの変数を使用します。
?
// 現在のタイムスタンプ値を配列に入れます
$timestamp = time();
echo $timestamp;
echo "p";
$date_time_array = getdate( $timestamp);
$hours = $date_time_array[ "時間"];
$ minutes = $date_time_array["分"];
$秒 = $date_time_array[ "秒"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["年"];
// mktime() 関数を使用して Unix タイムスタンプ値を再生成します
$timestamp = mktime($時間,$分, $秒,$月,$日,$年);
echo $timestamp;
?
getdate() によって生成されたタイムスタンプ値を、対応する名前付き変数に入れることで、コードが比較的読みやすく、理解しやすくなります。現在の時刻に 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["秒"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["年"];
// mktime() 関数を使用して Unix タイムスタンプ値を再生成します
// 19 時間を追加
$timestamp = mktime($hours + 19, $分,$秒,$月, $日,$年);
echo strftime( "%Hh%M %A %d %b",$timestamp);
echo "19 時間を追加した後の br~E";
?
実行後、次の結果が得られます:
6月03日土曜日14時58分
6月04日日曜日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 は、分や日など、追加する時間間隔を表す文字列式です。number は、追加する時間間隔の数を表す数値式です。
Interval (時間間隔の文字列式) には、次のいずれかの値を指定できます:
yyyy年年
q四半期
m月
y 年の日付
d日
w Weekday一週間の日数
ww 年間何週目
h 時 時
n 分
秒秒
w、y、d の関数はまったく同じです。つまり、現在の日付に 1 日を加算し、q は 3 か月を加算し、ww は 7 日を加算します。
?
function DateAdd ($interval, $number, $date) {
$date_time_array = getdate($date);
$hours = $date_time_array["hours"];
$ minutes = $date_time_array["分"];
$秒 = $date_time_array["秒"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["年"];
スイッチ ($interval) {
case "yyyy": $year +=$number;
case "q": $month +=($number*3);
case "m": $month +=$number;
ケース "y":
ケース "d":
case "w": $day+=$number;
case "ww": $day+=($number*7);
case "h": $hours+=$number;
case "n": $分+=$number;
case "s": $秒+=$number;
}
$timestamp = mktime($時間,$分, $秒,$月,$日, $年);
$timestamp を返します;}
?
上記のコードを dateadd.inc ファイルとして保存し、次のコードを実行できます:
?
include('dateadd.inc');
$temptime = time();
echo strftime( "%Hh%M %A %d %b",$temptime);
$temptime = DateAdd("n" ,50,$temptime);
echo "p";
echo strftime( "%Hh%M %A %d %b",$temptime);
?
以下を取得します:
6月03日土曜日15時41分
6月03日土曜日16時31分
PHP に DateDiff 関数を追加
DateAdd は完了しましたが、DateDiff はどうなるでしょうか?
ドキュメントによると、DateDiff(interval,date1,date2) 関数は「2 つの日付の間の時間間隔を返す」と定義されています。
Intervals パラメーターの使用法は、DateAdd 関数の場合と同じです。過度の複雑さを避けるために、Vbscript の DateDiff 関数の他の複雑なパラメーター、つまり 2 つのオプションのパラメーター変数 [firstdayofweek[, firstweekofyear]] (これらは、週の最初の日が日曜日か日曜日かを判断するために使用されます) を無視することにしました。月曜日と年の最初の週の定数。間隔には次の 5 つの値のみが許可されます: "w" (週)、"d" (日)、"h" (時間)、"n" (分) . と「s」(秒)。 何が考えられるか見てみましょう: 次のコードが必要なものです:
?
関数 DateDiff ($interval, $date1,$date2) {
// 2 つの日付の間の秒数を取得します
$timedifference = $date2 - $date1;
スイッチ ($interval) {
case "w": $retval = bcdiv($timedifference ,604800);
ケース "d": $retval = bcdiv( $timedifference,86400);
case "h": $retval = bcdiv ($timedifference,3600);
; case "n": $retval = bcdiv($timedifference,60);
case "s": $retval = $timedifference;
}
$retval を返します;}
?
上記のコードを datediff.inc ファイルとして保存し、次のコードを実行します:
?
include('datediff.inc');
include('dateadd.inc');
$currenttime = time();
echo "現在時刻: ".strftime("%Hh%M %A %d %b" ,$currenttime)."br";
$newtime = DateAdd ("n",50 ,$currenttime);
echo "時間プラス 50 分: ".strftime("%Hh%M %A %d %b" ,$newtime)."br";
$temptime = DateDiff ("n",$currenttime ,$newtime);
echo "2 つの時刻間の間隔: ".$temptime;
?
すべてがうまくいけば、次の結果が表示されます:
現在時刻: 6月03日土曜日16時23分
時間+50分: 6月03日土曜日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 プログラムで使用する方法だけです。
PHP時刻表示例
参加時間: 2004-12-18 17:22:53 サイズ: 1 KB 読み取り数: 1564
1 つ目のタイプ: シンプル (学習用)
$today=date("Y-m-d G:i:s");
エコー「
」 $今日
";
?>

2 番目のタイプ:
/*
フォーマット時間
*/
関数 formatTime($time,$type="1"){
スイッチ($type){
case 1;#2002-06-0418:58 火曜日
return date("Y.m.d H:i",$time)."".date(" l",$time)."";
ケース 2;#2002 年 6 月
return date("MY",$time);
ケース 3;#2002-06-04 18:58
return date("Y.m.d H:i",$time);
ケース 4;#06-04 AM
return date("m-d A",$time);
ケース 5;#06-04 18:58
return date("m.d H:i",$time);
}
「2007-07-12」「2007-06-27」などの文字列形式で保存された 2 つの日付を比較する場合、結果がどうなるかわかりません。そのような日付を比較する最良の方法は何ですか?サイズ的には
リーハオ 2006年7月17日 午前1時33分
/*日付の比較*/
$Date_1="2007-07-12";
$Date_2="2007-06-27";
/*
まず、explode関数を使用して文字列
を分割します。 explode(「引用符は条件に基づいています。これを:に変更すると、: を使用して文字列を分割します。さまざまな側面に適用できます。」、後で分割される文字列)
*/
$Date_explode_1=explode("-",$Date_1);
$Date_explode_2=explode("-",$Date_2);
/*
文字列を分割した後、mktime 関数
を使用して時間を計算します。 mktime によって計算される時間は秒単位で計算されることを説明する必要があります。
これからは簡単です。詳しくはマニュアルを読んでください
*/
$Day_1=mktime(0,0,0,$Date_explode_1[1],$Date_explode_1[2],$Date_explode_1[0]);
$Day_2=mktime(0,0,0,$Date_explode_2[1],$Date_explode_2[2],$Date_explode_2[0]);
$Days=round(($Day_1-$Day_2)/3600/24);
echo "必要な結果は $Days 日です";
?>
90日後の日付を取得する方法
参加時間: 2004-12-18 18:09:53 サイズ: 1 KB 読み取り数: 158
//今日の時刻情報を取得します
$Y=日付(Y);
$m=日付(m);
$d=日付(d);
//$m は月、$d は日、$Y は年です。「+」記号は、その後、「-」記号を使用して何日前の日付を取得することを示します。「Y 年 m 月」 「d日」は単なる表示形式です。「Y-m-d」に変更できます
$out_date1=date( "Y 年 m 月 d 日", mktime(0,0,0,$m,$d+7,$Y) );//1 週間後
$out_date2=date( "Y 年 m 月 d 日", mktime(0,0,0,$m,$d+14,$Y) );//2 週間後
$out_date3=date( "Y年m月d日", mktime(0,0,0,$m+1,$d,$Y) );//1ヶ月後
$out_date4=date( "Y年m月d日", mktime(0,0,0,$m+2,$d,$Y) );//2ヶ月後
$out_date5=date( "Y年m月d日", mktime(0,0,0,$m+3,$d,$Y) );//3ヶ月後
$out_date6=date( "Y 年 m 月 d 日", mktime(0,0,0,$m+6,$d,$Y) );//6 か月後
$out_date7=date( "Y年m月d日", mktime(0,0,0,$m,$d,$Y+1) );//1年後


echo date("Ymd", time() + 90*86400);

echo date("Y-m-d",strtotime("2004-10-26 +90day"));
date("Y-m-d",strtotime("+90 日"));



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。