Determinare correttamente se la stringa della data è una data valida in quel formato

C
Come uso PHP per ottenere l'anno in corso?
Converti timestamp in data/ora leggibile PHP

Troverai la soluzione alla dichiarazione del problema: prendi una stringa come 2013-13-01 e indica se è una data valida o meno per il formato yyyy-mm-dd?

soluzione 1

Puoi usare DateTime::createFromFormat() per questo scopo:

function validateDate($date, $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    // The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.
    return $d && $d->format($format) === $date;
}
var_dump(validateDate('2013-13-01'));  // false
var_dump(validateDate('20132-13-01')); // false
var_dump(validateDate('2013-11-32'));  // false
var_dump(validateDate('2012-2-25'));   // false
var_dump(validateDate('2013-12-01'));  // true
var_dump(validateDate('1970-12-01'));  // true
var_dump(validateDate('2012-02-29'));  // true
var_dump(validateDate('2012', 'Y'));   // true
var_dump(validateDate('12012', 'Y'));  // false

soluzione 2

Utilizzare in modo semplice con la funzione predefinita di PHP:

function checkmydate($date) {
  $tempDate = explode('-', $date);
  // checkdate(month, day, year)
  return checkdate($tempDate[1], $tempDate[2], $tempDate[0]);
}

https://stackoverflow.com/questions/19271381/correctly-determine-if-date-string-is-a-valid-date-in-that-format

Come uso PHP per ottenere l'anno in corso?
Converti timestamp in data/ora leggibile PHP

Rete di tutor

Condividi questo

Impara PHP dalla A alla Z