3

ユーザーが登録した日付に応じて支払わなければならない金額を決定する PHP スクリプトを作成する必要があります。登録が遅いほど料金が高くなるため、スクリプトの基本コードは次のとおりです。

private $date;

function __construct() {
    $this->date = getdate();
}

function get_amount()
{
    $day = $this->date["mday"];
    $month = $this->date["month"];
    $year = $this->date["year"];
    $date = $day.$month.$year;
    switch($date) {
        case "26October2012":
            return "800";
            break;
        case "26Novermber2012":
            return "900";
            break;
    }
}

しかし、明らかに、このケース ステートメントは本来の機能を果たしません。したがって、ユーザーが 2012 年 10 月 26 日より前に登録した場合は 800 を支払い、11 月 26 日より前で 10 月 26 日より後に登録した場合は 900 を支払います。

4

3 に答える 3

4

日付を Unix タイムスタンプに変換して比較するだけで、全体がずっと簡単になります。strtotime関数を参照してください。

$compare_date = "2012-10-26";
$todays_date = date("Y-m-d");

$today_ts = strtotime($todays_date);//unix timestamp value for today
$compare_ts = strtotime($compare_date);//unix timestamp value for the compare date

if ($today_ts > $compare_ts) {//condition to check which is greater
   //...
}

strtotimeは、日時を整数のUnix タイムスタンプに変換します。Unix タイムスタンプは、1970 年 1 月 1 日の協定世界時 (UTC) の午前 0 時から経過した秒数として定義されます。したがって、整数であるため、文字列を操作しなくても簡単に比較できます。

于 2012-10-26T06:06:47.430 に答える
0

switchステートメントを使用して範囲比較を行うことはできません。

日付をタイムスタンプに変換してから、 を使用して比較を行うことができますif-else

于 2012-10-26T06:08:14.063 に答える
0

amount異なる日付を含む配列を作成します。

$amountPerDate = array(
    '2012-10-26' => 800,
    '2012-11-26' => 900,
);

それをループして、対応するamount値を取得します。

krsort($amountPerDate); // Recursive sort to check greater dates first
$date = strtotime($date);  // Convert '2012-10-23' to its numeric equivalent for the date comprasion
$amount = 0; // Default amount value
foreach ($valuePerData as $date => $amount) {
    if ($date >= strtotime($date)) {
        $amount = $amount;
    }
}
于 2012-10-26T06:19:44.333 に答える