usted una trabajos trabajo trabajar solucion sobre respuestas respuesta quieres que porque nuestra mejores entrevistas entrevista empresa divertidos decir con ascender aportaria anteriores acertijos php mysql datetime solr

php - una - Otra pregunta de dateTime



que aportaria usted a la empresa respuestas (6)

Actualmente tengo una fecha en este formato

2010-03-03 10:39:18

que es un campo TIMESTAMP en MySQL. Necesito tener la fecha en este formato para un motor de búsqueda llamado Solr:

1995-12-31T23:59:59Z

Aquí hay un texto de su sitio web sobre las fechas:

Solr espera que las fechas estén en UTC al indexar. El formato para este campo de fecha es de la forma 1995-12-31T23: 59: 59Z, y es una forma más restringida de la representación canónica de dateTime http://www.w3.org/TR/xmlschema-2/#dateTime . La "Z" final indica la hora UTC y es obligatoria. Se permiten segundos fraccionarios opcionales: 1995-12-31T23: 59: 59.999Z Todos los demás componentes son obligatorios.

Me dieron este código de otra Q aquí en SO, pero no funciona. Solr se queja de una "cadena de tiempo no válida":

$solr_date = date(''c'', (strtotime($date_from_mysql)); // doesn''t work

Cuando se hace eco de $solr_date, el Z final mencionado anteriormente no está allí. Gracias.


Aquí está la solución de PHP:

Divida su cadena de fecha (2010-03-03 10:39:18) según los argumentos de la función mktime.

$solr_date = date(''c'', mktime($year,$month,$date, $h, $m , $s)); # it will work


En primer lugar, vale la pena señalar que las columnas de fecha y hora en MySQL no se almacenan en ningún formato de cadena específico. Se convierten en cadenas cuando se imprimen y puede elegir cómo formatearlas.

Si desea una solución MySQL pura, las funciones que son relevantes para su problema incluyen CONVERT_TZ () para obtener la hora UTC y DATE_FORMAT () para mostrarla según sea necesario. P.ej:

SELECT CURRENT_TIMESTAMP, CONVERT_TZ(CURRENT_TIMESTAMP, ''+01:00'', ''+00:00''), DATE_FORMAT(CONVERT_TZ(CURRENT_TIMESTAMP, ''+01:00'', ''+00:00''), ''%Y-%m-%dT%H:%i:%sZ'')

El problema es básicamente que debe conocer su zona horaria de antemano, ya que las columnas TIMESTAMP no permiten almacenar dicha información. Además, puede encontrar problemas con el horario de verano.

Acerca de PHP, la función de fecha () permite combinar el código de formato, no está limitado a uno solo:

<?php $ts = strtotime($date_from_mysql); $solr_date date(''Y-m-d'', $ts) . ''T'' . date(''H:i:s'', $ts) . ''Z''; ?>


¿Por qué no lo convierte a UTC?

$datetime = "2010-01-19 00:00:00"; echo "Datetime Before: ".$datetime."<br />"; $dttostr = strtotime("2010-01-19 00:00:00"); echo "Datetime After: ".formatToUTC($dttostr)."<br />"; echo "System Timezone: ".date_default_timezone_get()."<br />"; function formatToUTC($passeddt) { // Get the default timezone $default_tz = date_default_timezone_get(); // Set timezone to UTC date_default_timezone_set("UTC"); // convert datetime into UTC $utc_format = date("Y-m-d/TG:i:s/Z", $passeddt); // Might not need to set back to the default but did just in case date_default_timezone_set($default_tz); return $utc_format; }


Esto es un truco, pero funciona para mí:

$to = date(''c'', strtotime($to)).''.000Z'';


Aquí hay otra alternativa:

$datetime = new DateTime(''2010-01-19 00:00:00''); echo str_replace(''+00:00'', ''Z'', $datetime->format(''c''));

Véalo en acción


Solo usa

gmdate(''Ymd/TH:i:s/Z'', $time);