una obtener numero mes fecha español date_format convertir actual php formatting strptime

obtener - strftime php



¿Error de formateo de PHP strptime? (5)

Confirmo:

$p = strptime("09.02.2002", "%d.%m.%Y"); var_dump($p);

Salida:

array (9) {["tm_sec"] => int (0) ["tm_min"] => int (0) ["tm_hour"] => int (0) ["tm_mday"] => int (9) [ "tm_mon"] => int (1) ["tm_year"] => int (102) ["tm_wday"] => int (0) ["tm_yday"] => int (0) ["unparsed"] => cadena (0) ""}

OS X Leopard, PHP 5.3.2

Estoy luchando con un problema php 5.2.6. Una API que utilizamos devuelve fechas en este formato DDMMYYYYHHMM. Exactamente ese formato, longitud fija, sin delimitadores. Sin embargo, en mi experimentación, este formato parece romper strptime, que devuelve un falso (error) cuando le doy una fecha en este formato. Se puede reproducir, al menos en mi sistema, con este ejemplo:

$format = "%d%m%Y%H%M"; echo print_r(strptime(strftime($format,1225405967),$format),true);

Si agrego cualquier carácter entre la fecha y la hora, funciona, incluso un espacio. Entonces, esto SÍ funciona:

$format = "%d%m%Y %H%M"; echo print_r(strptime(strftime($format,1225405967),$format),true);

¿Me estoy perdiendo algo obvio?

editar: además de esto y debido a los resultados indicados por los comentarios, esto parece ser específico de la plataforma. Puedo reproducirlo en los Mac que ejecutan OSX Leopard en la oficina, pero los cuadros de Linux lo analizan bien. Supongo que es un error o idiosincrasia del tiempo de barrido en la biblioteca C subyacente en el * nix de OSX.


Nada obvio ya que ambas versiones funcionan bien en PHP 5.2.0. Sin embargo, no puedo verificar fácilmente 5.2.6 en este momento. Eso tendrá que esperar hasta que llegue a casa.


Es muy probable que esto esté aislado solo para Mac, ya que aún no se ha implementado en Windows (aunque ya aprobé esa sugerencia).

5.2.6 Fatal error: Call to undefined function strptime() in F:/htdocs/strptime.php on line 5

Me gustaría seguir adelante y enviar un error a bugs.php.net .


Esta función depende de la configuración regional. ¿Has intentado configurar diferentes locale? (ver setlocale() )


Si crees que el problema está en MacOS X y en la biblioteca C, entonces podrías crear un caso de prueba para demostrarlo. Por ejemplo, ejecuté el código siguiente en MacOS X 10.4.11 (PPC, G4, 32 bits) y obtuve el resultado:

Now: 1225573977 Formatted (12): 011120082112 End: 0xBFFFF553 (Buffer: 0xBFFFF547) Then: year = 2008, month = 11, day = 1, hour = 21, minute = 12 Reformatted (12): 011120082112

El código que utilicé es:

#include <time.h> #include <stdio.h> int main(void) { time_t now = time(0); struct tm *tm = gmtime(&now); char format[] = "%d%m%Y%H%M"; char buffer1[64]; char buffer2[64]; size_t f_len = strftime(buffer1, sizeof(buffer1), format, tm); struct tm then; char *end = strptime(buffer1, format, &then); size_t p_len = strftime(buffer2, sizeof(buffer2), format, &then); printf("Now: %ld/n", (long)now); printf("Formatted (%lu): %s/n", (unsigned long)f_len, buffer1); printf("End: 0x%08lX (Buffer: 0x%08lX)/n", (unsigned long)end, (unsigned long)buffer1); printf("Then: year = %d, month = %d, day = %d, hour = %d, minute = %d/n", then.tm_year + 1900, then.tm_mon + 1, then.tm_mday, then.tm_hour, then.tm_min); printf("Reformatted (%lu): %s/n", (unsigned long)p_len, buffer2); return(0); }

Sobre la base de lo que veo, no hay ningún error en strptime () en la versión que estoy usando. Podemos debatir sobre los méritos de la comprobación de errores inexistentes, y de las <inttypes.h> frente a las notaciones C99 <inttypes.h> en la impresión, pero creo que el código es lo suficientemente preciso. gmtime() lugar de localtime() ; Dudo si ese fue un factor para no reproducir el problema.

¿Tal vez deberías mirar el conjunto de pruebas de PHP? ¿Tal vez deberías dividir tu compleja expresión en pedazos para detectar dónde ocurre el error en PHP?