1

strtotime() を使用して、「先月」の特定の日のタイムスタンプを取得できますか?そうでない場合、これを行う最も効率的な方法は何ですか?

これは私が欲しいものです

strtotime("5 last Month");

それ以外の

$time_day= 5;
$time_month= date("m");
$time_year= date("Y");

if($time_month<1){
$time_month=12;
$time_year--;
}else{
$time_month--;
}

$date=mktime(0,0,0,$time_month,$time_day,$time_year);
4

3 に答える 3

5

残念ながら、あなたがやりたいことは、現在strtotime()PHP で使用することはできません。mktime()andを使用して、1行で目的を達成する方法は次のdate()とおりです。

$timestamp = mktime(0, 0, 0, date('n') - 1, 21);

上記のコードは、前月の21日のタイムスタンプを検索します。21必要なものと交換するだけです。

これは次の理由で機能します。

1 未満の値 (負の値を含む) は、前年の月を逆順に参照するため、0 は 12 月、-1 は 11 月などになります。 [PHP ドキュメント]

したがって、月が1(1 月) の場合、月の値として実行mktime()0れます。これは、「前年の 12 月」を意味します。

于 2012-04-06T00:38:32.367 に答える
1

これを試して。

mktime()

http://uk3.php.net/manual/en/function.mktime.php

于 2012-04-05T13:55:31.000 に答える
0

バグ

まず、小さなバグを修正する必要があります。

if($time_month<1)    // If month==0
    {
    $time_month=12;    // New month==12
    $time_year--;
    }

このように、13 か月あります... ( 0,1,2,3,4,5,6,7,8,9,10,11,12 )。Datedate("m")は 1 から 12 までの値を指定する場合、そのコードは次のようになります。

if($time_month==1)    // If month==1
    {
    $time_month=12;    // New month==12
    $time_year--;
    }

最適化しない

もう一度考えてみると、これ以上最適化しようとは思わないでしょう。時期尚早の最適化は諸悪の根源であることを忘れないでください。コードが機能し、比較的短い場合 (その場合) は、そのままにしておくのが最善です。あなたが望むことをする機能があったとしても、唯一の違いは自分でコードをプログラムする必要がないということですが、バックグラウンドプロセスは本当に似ているので、最適化する必要はあまりありません(速度/資力)。

コードにコメントする

また、それが何をするかを説明する 1 ~ 2 行のコメントを書くことをお勧めします。たとえば、1 年程度でコードを再利用したい場合は、コードを理解しておくと役立ちます。

最後の考え。異なる月には異なる日があります。day="31";あなたのコードが手入力で使用されるのか、それともその日によって使用されるのかはわかりませんが、あなたが書いたコードdate("m")が 03だったらどうなるでしょうか。

考えられる解決策

これを見てください: Link。次のように動作します。

<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P10D'));    // 10 days ago
echo $date->format('Y-m-d') . "\n";
?>

出力します2000-01-10

于 2012-04-05T15:48:31.323 に答える