Pregunta

Busco una función idéntica a DateTime :: createFromFormat pero lo necesito para trabajar en un ambiente que ejecuta una versión de PHP que es más antigua que la versión 5.3. Básicamente necesito proporcionar un formato, al igual que tendría que utilizar con el Fecha () función, y luego necesito de análisis / validar una cadena contra ese formato, y devolver una marca de tiempo si la cadena tiene el formato correcto y una fecha válida.

Alguien sabe donde puedo encontrar algo por el estilo, o tengo que escribirlo yo mismo?

Una vez más, esto tiene que trabajar con un formato determinado, siempre como argumento. El formato puede ser cualquier cosa, por lo que no hay garantía de que sólo puede utilizar strtotime () .

¿Fue útil?

Solución

DateTime::createFromFormat y date_parse_from_format se han añadido en PHP 5.3 porque había una gran demanda de esa característica, especialmente de desarrolladores de quien código para los usuarios que no utilizan la fecha de EE.UU. / formatos de tiempo.


Antes de ellos, había que desarrollar una función específica para analizar el formato que estaba utilizando; con PHP <5,3, lo que generalmente se hace es:

  • Decidir qué formato será aceptado por la aplicación
  • Pantalla algún mensaje diciendo algo como "su entrada debe ser JJ / MM / AAAA" (francés para DD / MM / AAAA)
  • Compruebe que la entrada está bien, con respecto a ese formato
  • Y analizarlo para convertirlo en una fecha / hora que PHP puede entender.

Lo que significa que las aplicaciones y los desarrolladores de generalmente no permiten que muchos formatos, como cada formato significaba una validación additionnal + función de análisis diferente.


Si realmente necesita ese tipo de función, que permite cualquier formato posible, me temo que tendrá tipo de tener que escribir usted mismo: - (

Tal vez echar un vistazo a las fuentes de date_parse_from_format podría ayudar, si se entiende el código C? Debe estar en algo así como ext/date/php_date.c - pero no parece ser así de simple: se llama a la función timelib_parse_from_format, que se define en ext/data/lib/parse_date.c, y no se ve tan amigable ^^

Otros consejos

Se puede utilizar la clase Zend_Date de Zend Framework: http: // marco. zend.com/manual/en/zend.date.html

$date = new Zend_Date($string, $format);
$timestamp = $date->get();

Se puede usar strptime() - se trata de utilizar strftime() formato. Un poco diferente en comparación con date() formato pero hace casi las mismas cosas.

function createFromFormat($strptimeFormat, $date) {
    $date = strptime($date, $strptimeFormat);
    $date['tm_year'] += 1900;
    $date['tm_mon']++;
    $timestamp = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], $date['tm_mon'], $date['tm_mday'], $date['tm_year']);
    return new DateTime('@'. $timestamp);
}

Para la versión de PHP anteriores a 5.3 que utilice esta función abajo para obtener DateTime cadenas de formularios para objetos formateados como 'DD.MM.YYYY'.

function ParseForDateTimeValue ($strText)
{
    if ($strText != "")
    {
        if (ereg("^([0-9]{1,2})[/\.]\s*([0-9]{1,2})[/\.]\s*([0-9]{2,4})$",$strText,$arr_parts)) {

            $month = ltrim($arr_parts[2], '0');
            $day = ltrim($arr_parts[1], '0');
            $year = $arr_parts[3];

            if (checkdate($month, $day, $year)) {
               return new DateTime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
            }
        }
    }
    return NULL;
}
  • En primer lugar validar si la entrada es correcta.
  • A continuación, el extracto mes, día y año
  • Uso checkdate para validar la fecha.
  • Convertir a marca de tiempo y pasarlo al contructor de DateTime y devolverlo.

Se puede crear un timestamp y luego ejecutarlo a través de la fecha .. para crear el timestamp puede hacer algunas explode en la cuerda se obtiene ..

$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top