先月の日付が欲しいのですが。私はこれを書きました:
$prevmonth = date('M Y');
それは私に現在の月/年を与えます。私が使用する必要がある場合、私は言うことができませんstrtotime
、mktime
。タイムスタンプに何かありますか?後でリセットするために何かを追加して、サイトのすべてのタイムスタンプのすべてで日付が先月に設定されないようにする必要がありますか?私はRTMをしようとしていますが、これを理解するのは難しいです。
回答:
先月の日付を取得するのは簡単です
echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));
11月3日に戻ります
2014-10-1
2014-10-31
echo strtotime("-1 month");
これにより、先月のタイムスタンプが正確に出力されます。後で何もリセットする必要はありません。その後、英語形式にしたい場合は、date()を使用してタイムスタンプをフォーマットできます。
echo date("Y-m-d H:i:s",strtotime("-1 month"));
$prevmonth = date('M Y', strtotime("last month"));
不正解は次のとおりです。
$lastMonth = date('M Y', strtotime("-1 month"));
$lastDate = date('Y-m', strtotime('last month'));
その理由は、当月が30日以上で、前月が29日以下の場合、$ lastMonthは当月と同じになります。
例えば
If $currentMonth = '30/03/2016';
echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016
echo $lastDate = date('Y-m', strtotime('last month')); => 2016-03
正解は次のとおりです。
echo date("m-Y", strtotime("first day of previous month")); => 02-2016
echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016
echo date("m-Y",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016
前月だけを取得したい場合は、次のように使用できます
$prevmonth = date('M Y', strtotime('-1 months'));
前月の同じ日を取得したい場合は、次のように使用できます。
$prevmonth = date('M Y d', strtotime('-1 months'));
前月の最終日を取得したい場合は、次のように使用できます...
$prevmonth = date('M Y t', strtotime('-1 months'));
前月の初日を取得したい場合は、次のように使用できます...
$prevmonth = date('M Y 1', strtotime('-1 months'));
前の月が現在より短い場合、これが間違っていることがわかりました。
echo date("Y-m-d H:i:s",strtotime("-1 month"));
3月30日に試してみると、2012-02ではなく2012-03-01が表示されます...
より良い解決策に取り組んでいます...
public function getLastMonth() {
$now = new DateTime();
$lastMonth = $now->sub(new DateInterval('P1M'));
return $lastMonth->format('Ym');
}
2015-10-31
PHP 5.5および5.6.11。を取得します201510
-と同じ動作strtotime('- 1 month)
。
$lastMonth = date('M Y', strtotime("-1 month"));
var_dump($lastMonth);
$lastMonth = date('M Y', mktime(0, 0, 0, date('m') - 1, 1, date('Y')));
var_dump($lastMonth);
私が見つけた最良の解決策はこれです:
function subtracMonth($currentMonth, $monthsToSubtract){
$finalMonth = $currentMonth;
for($i=0;$i<$monthsToSubtract;$i++) {
$finalMonth--;
if ($finalMonth=='0'){
$finalMonth = '12';
}
}
return $finalMonth;
}
したがって、3月(3月)にいて、5か月を差し引くと、次のようになります。
subtractMonth(3,5);
これは10(10月)になります。年も希望する場合は、次のようにすることができます。
function subtracMonth($currentMonth, $monthsToSubtract){
$finalMonth = $currentMonth;
$totalYearsToSubtract = 0;
for($i=0;$i<$monthsToSubtract;$i++) {
$finalMonth--;
if ($finalMonth=='0'){
$finalMonth = '12';
$totalYearsToSubtract++;
}
}
//Get $currentYear
//Calculate $finalYear = $currentYear - $totalYearsToSubtract
//Put resulting $finalMonth and $finalYear into an object as attributes
//Return the object
}
わたしにはできる:
今日は:2012年3月31日
echo date("Y-m-d", strtotime(date('m', mktime() - 31*3600*24).'/01/'.date('Y').' 00:00:00')); // 2012-02-01
echo date("Y-m-d", mktime() - 31*3600*24); // 2012-02-29
前月の初日を取得したい場合は、次のように使用できます...$prevmonth = date('M Y 1', strtotime('-1 months'));
何?最初のデートは常に1:Dになります
先月取得するだけです。
今日は:2020-09-02
コード:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
結果:
2020-08-02
31
1月または8月ではない場合(に2020 May 31
なる2020 April 31
、存在しないなど)に何が起こるかを説明することも検討する必要があります
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
これは2011年3月2日水曜日01:01:01を返します-2月ではありません!strtotime('first day of previous month')
代わりに使用