0

特定の日付がphpで許可されているweekdays配列内にあるかどうかを確認する方法の問題で立ち往生しています。例えば、

    function dateIsAllowedWeekday($_date,$_allowed)
    {
    if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
    $allowed_weekdays=json_decode($_allowed);
    $weekdays=array();

    foreach($allowed_weekdays as $wd){
    $weekday=date("l",date("w",strtotime($wd)));
    array_push($weekdays,$weekday);
    }
    if(in_array(date("l",strtotime($_date)),$weekdays)){return TRUE;}
    else {return FALSE;}
        }
        else {return FALSE;}
    }
 /////////////////////////////   
    $date="21.05.2010"; //actually is Friday (5)
    $wd="[0,1,2]"; //Sunday,Monday,Tuesday

    if(dateIsAllowedWeekday($date,$wd)){echo "$date is within $wd weekday values!";} 
    else{echo "$date isn't within $wd weekday values!"}

「dmY」としてフォーマットされた日付と、[0,1,2]-(Sunday、Monday、Tuesday)のような平日番号(「曜日の数値表現」としてフォーマットされた)でデータベースから返された配列を入力しました。

データベースから返される文字列は「null」になる可能性があるので、私もチェックします。次に、このisDate関数は、日付が日付であり、問​​題がないかどうかをチェックします。

たとえば、2010年5月21日の日付が、この配列で許可されている平日であるかどうかを確認したいと思います。私の関数は常にTRUEを返し、どういうわけか平日は常に「木曜日」であり、理由はわかりません...

これをチェックする他の方法はありますか、または上記のコードのエラーは何ですか?どうも

4

4 に答える 4

2

最後にブール値のみを返すため、数値の曜日を文字列 (たとえば、「日曜日」) に変換する必要があると感じる理由がわかりません。とにかく、その部分を削除したので、以下のコードは期待どおりに機能するはずです:

function dateIsAllowedWeekday($_date,$_allowed)
{
  if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null)))
  {
    $allowed_weekdays = json_decode($_allowed);

    if (in_array(date("w", strtotime($_date)), $allowed_weekdays))
    {
      return TRUE;
    }
  }

  return FALSE;
}

21.05.2010(false を返す) および11.05.2010(true を返す) で、上記のように allowed_weekdays を使用してテストされました( [0,1,2])。

于 2010-05-11T10:52:23.617 に答える
1

PHP5.3 をすでに実行している場合は、次のこともできます。

function date_validWeekday($format, $date, array $weekdays) {
    return in_array(
        DateTime::createFromFormat($format, $date)->format('w'),
        $weekdays);
}

var_dump(date_validWeekday('d.m.Y', '21.05.2010', array(0,1,2))); // FALSE
var_dump(date_validWeekday('d.m.Y', '11.05.2010', array(0,1,2))); // TRUE
于 2010-05-11T10:59:22.043 に答える
1

木曜日を返し続ける理由はstrtotime()、1 桁の整数を使用しているためです。

$weekday=date("l",date("w",strtotime($wd)));

2 つのことのうちの 1 つが起こっていますが、どちらが正しいかはわかりません。

  1. 関数が整数をエポック タイムスタンプとして解釈する、または

  2. 関数は false を返しています。これは、date関数が として取得し0ます。

いずれの場合も、元のエポック開始時間から 10 秒以内です。

Thu, 01 Jan 1970 00:00:00 GMT

木曜日です。

于 2010-05-11T11:00:23.727 に答える
0
function dateIsAllowedWeekday($_date,$_allowed){
    if ((isDate($_date)) && (($_allowed!="null") && ($_allowed!=null))){
        return in_array(date("w",strtotime($_date)),json_decode($_allowed));
    }

    return false;
}
于 2010-05-11T11:06:07.023 に答える