Tarih php hafta içi izin olup olmadığını kontrol edin?

3 Cevap php

Belirli bir tarih php izin haftaiçi dizi içinde olup olmadığını kontrol etmek için nasıl bir sorun ile şaşırıp. Örneğin,

    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!"}

(Pazar, Pazartesi, Salı) - Ben girdi "GAY" olarak biçimlendirilmiş tarihleri ​​ve [0,1,2] gibi ('haftanın günü Sayısal temsili' olarak biçimlendirilmiş) hafta içi sayılar ile veritabanından dönen bir dizi var.

Veritabanından döndürülen dize "null" olabilir, bu yüzden de onu kontrol edin. Ardından, isDate fonksiyon kontrolleri tarih olmadığını bir tarih ve ok.

Ben tarih, örneğin 21.05.2010 bu dizide bir izin hafta içi olup olmadığını kontrol etmek istiyorum. Benim işlevi her zaman DOĞRU verir ve bir şekilde hafta içi hep 'Perşembe' ve ben neden bilmiyorum ...

Bunu kontrol etmek ya da ne yukarıdaki kodda benim hata olabilir başka yolları var mı? thx

3 Cevap

Ben size sadece sonunda bir boolean değer döndürür olarak bir dize (örneğin, "Pazar") içine haftanın sayısal güne dönüştürmek için ihtiyacı hissediyorum neden emin değilim; zaten ben o bölümü kaldırdık ve beklendiği gibi aşağıdaki kod çalışması gerekir:

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;
}

Yukarıdaki gibi allowed_weekdays ile, test 21.05.2010 (false döndürür) ve 11.05.2010 (true döndürür) ([0,1,2]).

Zaten PHP5.3 çalışan var ise, siz de yapabilirsiniz:

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

Eğer tek haneli tamsayı strtotime() kullanıyor çünkü Perşembe dönen tutar neden nedeni:

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

Oluyor iki şeylerden biri, ben emin değilim düşündüm:

  1. fonksiyonu bir çığır damgası olarak tamsayı yorumlar, veya

  2. fonksiyon date fonksiyonu 0 olarak aldığı yanlış dönüyor.

Her iki durumda da, özgün Epoch başlama saatinden 10 saniye içinde şunlardır:

Thu, 01 Jan 1970 00:00:00 GMT

Perşembe günü olduğunu.