Indicar si una fecha yyyy-mm-dd es correcta

Código PHP

PHP – Fechas – date

Función que comprueba una fecha en formato yyyy-mm-dd indicando si es un día válido o no.

Devuelve true si es correta o false si no lo es o esta vacía.

Acepta como formato de día y mes 1 o 2 dígitos. El año es siempre de 4 dígitos.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/**
* Class HelperValidate
*/
abstract class HelperValidate
{
/**
* Indica si una fecha en formato "yyyy-mm-dd" es una fecha válida.
*
* @param string $fecha
*
* @return bool
*/
public static function isDate( $fecha ): bool
{
$sep = '-';
$fecha = ''.$fecha;
// yyyy-mm-dd
if ( strlen( $fecha ) != 10 ) {
return false;
}
if ( $fecha[ 4 ] != $sep || $fecha[ 7 ] != $sep) {
return false;
}
list( $anio, $mes, $dia ) = explode( $sep, $fecha );
$dt = date( 'Y-m-d', mktime( 0, 0, 0, $mes, $dia, $anio ) );
if ( false === $dt ) {
return false;
}
return ( $fecha == $dt );
}
}
/** * Class HelperValidate */ abstract class HelperValidate { /** * Indica si una fecha en formato "yyyy-mm-dd" es una fecha válida. * * @param string $fecha * * @return bool */ public static function isDate( $fecha ): bool { $sep = '-'; $fecha = ''.$fecha; // yyyy-mm-dd if ( strlen( $fecha ) != 10 ) { return false; } if ( $fecha[ 4 ] != $sep || $fecha[ 7 ] != $sep) { return false; } list( $anio, $mes, $dia ) = explode( $sep, $fecha ); $dt = date( 'Y-m-d', mktime( 0, 0, 0, $mes, $dia, $anio ) ); if ( false === $dt ) { return false; } return ( $fecha == $dt ); } }
/**
 * Class HelperValidate
 */
abstract class HelperValidate
{

    /**
     * Indica si una fecha en formato "yyyy-mm-dd" es una fecha válida.
     *
     * @param string $fecha
     *
     * @return bool
     */
    public static function isDate( $fecha ): bool
    {
        $sep   = '-';
        $fecha = ''.$fecha;
        // yyyy-mm-dd
        if ( strlen( $fecha ) != 10 ) {
            return false;
        }
        if ( $fecha[ 4 ] != $sep || $fecha[ 7 ] != $sep) {
            return false;
        }
        list( $anio, $mes, $dia ) = explode( $sep, $fecha );
        $dt = date( 'Y-m-d', mktime( 0, 0, 0, $mes, $dia, $anio ) );
        if ( false === $dt ) {
            return false;
        }
        return ( $fecha == $dt );
    }

}

Ejemplos de comprobaciones:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$date = HelperValidate::isDate('2020-12-25');
echo $date; // true
$date = HelperValidate::isDate('2020-1-1');
echo $date; // false
$date = HelperValidate::isDate('2020-01-01');
echo $date; // true
$date = HelperValidate::isDate('1000-01-01');
echo $date; // false
$date = HelperValidate::isDate('9999-12-25');
echo $date; // false
$date = HelperValidate::isDate('0000-12-25');
echo $date; // false
$date = HelperValidate::isDate('20-12-25');
echo $date; // false
$date = HelperValidate::isDate('25-12-2020');
echo $date; // false
$date = HelperValidate::isDate('2020/12/25');
echo $date; // false
$date = HelperValidate::isDate('2020-24-25');
echo $date; // false
$date = HelperValidate::isDate('2020-12-35');
echo $date; // false
$date = HelperValidate::isDate('2020-12-25'); echo $date; // true $date = HelperValidate::isDate('2020-1-1'); echo $date; // false $date = HelperValidate::isDate('2020-01-01'); echo $date; // true $date = HelperValidate::isDate('1000-01-01'); echo $date; // false $date = HelperValidate::isDate('9999-12-25'); echo $date; // false $date = HelperValidate::isDate('0000-12-25'); echo $date; // false $date = HelperValidate::isDate('20-12-25'); echo $date; // false $date = HelperValidate::isDate('25-12-2020'); echo $date; // false $date = HelperValidate::isDate('2020/12/25'); echo $date; // false $date = HelperValidate::isDate('2020-24-25'); echo $date; // false $date = HelperValidate::isDate('2020-12-35'); echo $date; // false
$date = HelperValidate::isDate('2020-12-25');
echo $date; // true

$date = HelperValidate::isDate('2020-1-1');
echo $date; //  false

$date = HelperValidate::isDate('2020-01-01');
echo $date; //  true

$date = HelperValidate::isDate('1000-01-01');
echo $date; // false

$date = HelperValidate::isDate('9999-12-25');
echo $date; // false

$date = HelperValidate::isDate('0000-12-25');
echo $date; // false

$date = HelperValidate::isDate('20-12-25');
echo $date; // false

$date = HelperValidate::isDate('25-12-2020');
echo $date; // false

$date = HelperValidate::isDate('2020/12/25');
echo $date; // false

$date = HelperValidate::isDate('2020-24-25');
echo $date; // false

$date = HelperValidate::isDate('2020-12-35');
echo $date; // false