PHP日時増減操作例【date sttotime 1日プラス、1月プラスなどの操作を実現】
この実例はPHP時間の日にち増減操作について述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
時間関数はPHPの中の日常関数で、時間のデフォルトの時期は今日、昨日、明日、先週、来週、今週の開始時間と終了時間です。今月の開始時間の終了時間。先月の開始時間の終了時間、指定日の月曜日と日曜日などの方法があります。
2018-12-26今日:2018-12-21
--------------------------------------------------
昨日:2018-12-20
--------------------------------------------------
明日:2018-12-22
--------------------------------------------------
一週間後:2018-12-28
--------------------------------------------------
一週間と二日間の四時間二秒後:2018-12-30 15:46
--------------------------------------------------
来週の木曜日:2018-12-27
--------------------------------------------------
前の月曜日:2018-12-17
--------------------------------------------------
一ヶ月前:2018-11-21
--------------------------------------------------
一ヶ月後:2019-01-21
--------------------------------------------------
十年後:2028-12-21
--------------------------------------------------
php今週の開始時間と終了時間。今月の開始時間の終了時間。先月の開始時間の終了時間
2018-12-17|2018-12-23|2018-12-10|2018-12-16
今週の第一日(日曜日は一週間開始):2018-12-16
--------------------------------------------------
今週の第一日(月曜日は週開始):2018-12-17
--------------------------------------------------
今月の一日目:2018-12-01
--------------------------------------------------
今月最後の日:2018-12-31
--------------------------------------------------
先月の一日目:2018-11-01
--------------------------------------------------
先月最後の日:2018-11-30
--------------------------------------------------
例えば、2011年の12月31日土曜日と2012年1月1日日曜日は、月曜日と日曜日が全く違っています。
2011年12月31日の月曜日と日曜日はそれぞれ対応します。
2011-12-26
2012-01-01
しかし、2012年1月1日に貰った月曜日と日曜日はそれぞれ対応します。
2012-01-02
2012-01-04
理由は伝わり方の週は53週目ですが、2011年は53週目ですので、計算が間違っています。
週が10より大きい場合(月は10週間は無理ですので)、月が1の場合は、年1を減算します。
オンライン日付/日数計算機:
http://tools.jb51.net/jisuanqi/date_jisuanqi
オンライン日付計算機/差分日数計算機:
http://tools.jb51.net/jisuanqi/datecalc
オンライン日付の日数差計算機:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unixタイムスタンプ(timestamp)変換ツール:
http://tools.jb51.net/code/unixtime
PHPについてもっと興味のある読者は、本駅のテーマを見てもいいです。「php日付と時間の使い方のまとめ」、「PHP配列(Aray)操作テクニック大全」、「PHP基本文法入門教程」、「PHP演算と演算子の使い方のまとめ」、「php対象プログラム設計入門教程」、「php文字列(string)使い方のまとめ」、「php+mysqlデータベース操作入門教程」および「phpよくあるデータベースの操作技巧のまとめ」
本論文で述べたように、皆さんのPHPプログラムの設計に役に立ちますように。
時間関数はPHPの中の日常関数で、時間のデフォルトの時期は今日、昨日、明日、先週、来週、今週の開始時間と終了時間です。今月の開始時間の終了時間。先月の開始時間の終了時間、指定日の月曜日と日曜日などの方法があります。
date_default_timezone_set('PRC'); //
// 5
$date1 = "2018-12-21";
echo date('Y-m-d',strtotime("$date1 +5 day")); // :2018-12-26
// , , , day month year
//+++ 、 、 、 、 +++++++++
echo " :",date("Y-m-d",time()),"<hr>";
echo " :",date("Y-m-d",strtotime("-1 day")), "<hr>";
echo " :",date("Y-m-d",strtotime("+1 day")), "<hr>";
echo " :",date("Y-m-d",strtotime("+1 week")), "<hr>";
echo " :",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>";
echo " :",date("Y-m-d",strtotime("next Thursday")), "<hr>";
echo " :".date("Y-m-d",strtotime("last Monday"))."<hr>";
echo " :".date("Y-m-d",strtotime("last month"))."<hr>";
echo " :".date("Y-m-d",strtotime("+1 month"))."<hr>";
echo " :".date("Y-m-d",strtotime("+10 year"))."<hr>";
実行結果:2018-12-26今日:2018-12-21
--------------------------------------------------
昨日:2018-12-20
--------------------------------------------------
明日:2018-12-22
--------------------------------------------------
一週間後:2018-12-28
--------------------------------------------------
一週間と二日間の四時間二秒後:2018-12-30 15:46
--------------------------------------------------
来週の木曜日:2018-12-27
--------------------------------------------------
前の月曜日:2018-12-17
--------------------------------------------------
一ヶ月前:2018-11-21
--------------------------------------------------
一ヶ月後:2019-01-21
--------------------------------------------------
十年後:2028-12-21
--------------------------------------------------
php今週の開始時間と終了時間。今月の開始時間の終了時間。先月の開始時間の終了時間
date_default_timezone_set('PRC'); //
/**
* :
* :$gdate , , :YYYY-MM-DD
* $first ,0 ,1
* : array(" ", " ");
*
*/
function aweek($gdate = "", $first = 0){
if(!$gdate) $gdate = date("Y-m-d");
$w = date("w", strtotime($gdate));// , 0-6
$dn = $w ? $w - $first : 6;//
//
$st = date("Y-m-d", strtotime("$gdate -".$dn." days"));
//
$en = date("Y-m-d", strtotime("$st +6 days"));
//
$last_st = date('Y-m-d',strtotime("$st - 7 days"));
//
$last_en = date('Y-m-d',strtotime("$st - 1 days"));
return array($st, $en,$last_st,$last_en);//
}
echo implode("|", aweek("", 1)).'<br />';
//echo date("Y-m-d",strtotime("time()"));
echo ' ( ):'.date('Y-m-d', time()-86400*date('w')).'<hr>';
echo ' ( ):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<hr>';
echo ' :'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<hr>';
echo ' :'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<hr>';
//
$m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));
//
$t = date('t',strtotime("$m"));
echo ' :'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<hr>';
echo ' :'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<hr>';
実行結果:2018-12-17|2018-12-23|2018-12-10|2018-12-16
今週の第一日(日曜日は一週間開始):2018-12-16
--------------------------------------------------
今週の第一日(月曜日は週開始):2018-12-17
--------------------------------------------------
今月の一日目:2018-12-01
--------------------------------------------------
今月最後の日:2018-12-31
--------------------------------------------------
先月の一日目:2018-11-01
--------------------------------------------------
先月最後の日:2018-11-30
--------------------------------------------------
//PHP ,
function get_week_range($week, $year){
$timestamp = mktime(1,0,0,1,1,$year);
$firstday = date("N",$timestamp);
if($firstday >4){
$firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
}else{
$firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
}
$monday = strtotime('+'.($week - 1).' week', $firstweek);
$sunday = strtotime('+6 days', $monday);
$start = date("Y-m-d", $monday);
$end = date("Y-m-d", $sunday);
return array($start, $end);
}
//strtotime BUG
//PHP ,
function get_week_range2($week, $year){
$timestamp = mktime(1,0,0,1,1,$year);
$firstday = date("N",$timestamp);
if($firstday >4){
$firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);
}else{
$firstweek = strtotime('-'.($firstday-1).' days', $timestamp);
}
$monday = strtotime('+'.($week - 1).' week', $firstweek);
$sunday = strtotime('+6 days', $monday);
$start = date("Y-m-d", $monday);
$end = date("Y-m-d", $sunday);
return array($start, $end);
}
しかし、年越しの時に使うと問題があります。例えば、2011年の12月31日土曜日と2012年1月1日日曜日は、月曜日と日曜日が全く違っています。
2011年12月31日の月曜日と日曜日はそれぞれ対応します。
2011-12-26
2012-01-01
しかし、2012年1月1日に貰った月曜日と日曜日はそれぞれ対応します。
2012-01-02
2012-01-04
理由は伝わり方の週は53週目ですが、2011年は53週目ですので、計算が間違っています。
週が10より大きい場合(月は10週間は無理ですので)、月が1の場合は、年1を減算します。
if(date('m',$last_week_time) == '01' and $tmp_last_week > 10){
$last_week_year--;
}
PS:ここでまたいくつかの時間と日付に関するツールを紹介します。参考にしてください。オンライン日付/日数計算機:
http://tools.jb51.net/jisuanqi/date_jisuanqi
オンライン日付計算機/差分日数計算機:
http://tools.jb51.net/jisuanqi/datecalc
オンライン日付の日数差計算機:
http://tools.jb51.net/jisuanqi/onlinedatejsq
Unixタイムスタンプ(timestamp)変換ツール:
http://tools.jb51.net/code/unixtime
PHPについてもっと興味のある読者は、本駅のテーマを見てもいいです。「php日付と時間の使い方のまとめ」、「PHP配列(Aray)操作テクニック大全」、「PHP基本文法入門教程」、「PHP演算と演算子の使い方のまとめ」、「php対象プログラム設計入門教程」、「php文字列(string)使い方のまとめ」、「php+mysqlデータベース操作入門教程」および「phpよくあるデータベースの操作技巧のまとめ」
本論文で述べたように、皆さんのPHPプログラムの設計に役に立ちますように。