2009-11-02 19 views
13

Estoy trabajando en una migración de blog desde un blog personalizado a Wordpress. Uno de los campos que Wordpress está buscando en la base de datos es un sello de fecha y hora configurado en GMT, que es 4 horas antes de lo previsto. Así que básicamente necesito tomar nuestra marca de fecha y hora (en formato YYYY-MM-DD HH: MM: SS) y agregarle cuatro horas. Estaba mirando el comando de MySQL "ADDTIME", pero creo que solo funciona en selects, no en inserts.Cómo agregar 4 horas al tiempo en PHP/MySQL

Había trabajado un script que explotaba la fecha en partes, y añadí 4 horas al tiempo, pero la siguiente lógica que se requeriría para verificar cuando 4 horas avanza al siguiente día/mes/año parecía un poco excesivo.

+1

No hay nada que le impida hacerlo en la base de datos.Puede migrar los datos desde la base de datos existente sin alterar las marcas de tiempo y ACTUALIZAR la tabla de blog SET blog_timestamp = DATE_ADD (fecha_tiempo del blog, INTERVALO 4 HORAS); - que lograría lo que quieres. – artlung

Respuesta

31
date($format, strtotime("$date + 4 hours")); 
6

¿Qué hay de:

date("Y-m-d H:i:s", strtotime("2009-08-09 23:44:22")+4*60*60) 

o incluso

date("Y-m-d H:i:s", strtotime("2009-08-09 23:44:22 + 4 hours")) 

posible que necesite un poco de comprobación de errores, pero debería resolver su problema.

14

No hay nada que impida ADDTIME() de ser utilizado en un INSERT O UPDATE, pero DATE_ADD() es probablemente lo que funciona mejor:

INSERT INTO table_name 
SET my_datetime = DATE_ADD('2009-11-01 19:30:00', INTERVAL 4 HOURS), 
...other insert columns here... ; 
+7

'UPDATE table SET campo = DATE_ADD (campo, INTERVALO 4 HORAS);' es un poco más genérico :) – jensgram

+0

Supuse que SerpicoLugNut ya había extraído marcas de tiempo así que esa era la sintaxis que usaba. Cada marca de tiempo extraída terminaría mirando de esa manera en INSERTAR. Es curioso, agregué el formato genérico como un comentario arriba justo cuando saliste del tuyo. :-) – artlung

+2

Eso es 'INTERVALO 4 HORAS 'y no' INTERVALO 4 HORAS' en MySQL 5.5.44 –

3

O mejor en SQL

DATE(DATE_ADD(`Table`.`Column`, INTERVAL 4 HOURS)) 
1

Parece que el TZ de su base de datos está configurado en GMT (UTC), que es como debería ser. Necesita convertir su fecha local en GMT al agregar a la base de datos.

del Manual de Referencia 5.1 MySQL:

CONVERT_TZ(dt,from_tz,to_tz) 

CONVERT_TZ() convierte un dt valor de fecha y hora de la zona de tiempo dado por from_tz a la zona de tiempo dado por to_tz y devuelve el valor resultante. Las zonas horarias pueden especificarse como se describe en la Sección 5.10.8, "Soporte de zona horaria del servidor MySQL". Esta función devuelve NULL si los argumentos no son válidos.

Si el valor cae fuera del rango admitido del tipo TIMESTAMP cuando se convierte de from_tz a UTC, no se produce ninguna conversión. El rango TIMESTAMP se describe en la Sección 11.1.2, "Descripción general de los tipos de fecha y hora".

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); 
     -> '2004-01-01 13:00:00' 

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); 
     -> '2004-01-01 22:00:00' 
+0

nota: para que las zonas horarias simbólicas funcionen (GMT, PST), debe configurar las tablas relacionadas con la zona horaria en mysql base de datos (zoneinfo). – dar7yl

2

Para todas las respuestas usando DATE_ADD, la sintaxis correcta es "de 4 horas" y no "4 HORAS" (al menos en la versión actual de MySQL):

UPDATE table SET field = DATE_ADD(field, INTERVAL 4 HOUR);

0

que he utilizado este método:

$format = Y-m-d; //you can use any format if you want 
$date = $row['date']; // from mysql_fetch_array 
$date2 = date($format, strtotime("$date + 4 week")); 
echo $date; 
0

Si utiliza (día/mes/año) [formato de fecha brasileña] como abajo, no funciona:

$ todays_date = date ("d/m/Y H: i: s");

echo "Fecha/hora del servidor".$ todays_date;

echo "fecha de servidor/hora + 2 horas" .date ("d/m/Y H: i: s", strtotime ("$ todays_date + 2 horas"));

Resultado:

servidor de fecha/hora                   10/04/2012 07:44:36

fecha del servidor/hou r + 2 horas     04/10/2012 09:44:36


Es necesario que (mes/día/año) y funciona perfecto:

$ todays_date = date ("m/d/YH: i: s"); echo "Fecha/hora del servidor".

$ todays_date. "
"; echo "" fecha de servidor/hora + 2 horas ".date (" m/d/YH: i: s", strtotime ("$ todays_date + 2 horas"));

Resultado:

fecha/hora del servidor                     04/10/2012 07:44:36

fecha del servidor/hora + 2 horas     04/10/2012 09:44:36

0

de trabajo 100%

<?php 

$datee= date("Y-m-d", strtotime("$last_update+ 10 hours")); 
$timee= date("H:i:s", strtotime("$last_update+ 10 hours")); 
?> 

Last update was on: <?php echo $datee; ?> at <?php echo $timee; ?> 

$ last_update es una marca de tiempo de contenido de mysql

El resultado será como esto "La última actualización fue: 2015-02-05 en 5:01:43"

0
<?php 

function data_time($DT, $pm, $val, $time_type){ 
    $time = date("H:i:s"); 
    $date = date("d.m.Y"); 

    if($DT=='d'){ 
     switch($pm){ 
      case '+': $newData = date("d.m.Y ", strtotime("$date + $val $time_type")); 
      break; 
      case '-': $newData = date("d.m.Y ", strtotime("$date - $val $time_type")); 
      break; 
     } 
     return $newData; 
    } 
    if($DT=='t'){ 
     switch($pm){ 
      case '+': $newTime = date("H:i:s ", strtotime("$time + $val $time_type")); 
      break; 
      case '-': $newTime = date("H:i:s ", strtotime("$time - $val $time_type")); 
      break; 
     } 
     return $newTime; 
    } 
} 

$newData = data_time('t','+',5,'year') 
//or 

$DataTime = 'd'; // 't' or 'd' 
$PlusMinus ='+'; // '+' or '-' 
$val = 1;  // 0-9 
$DMT ='month'; // 'day', 'month' or 'year' 

$newData = data_time($DataTime, $PlusMinus, $val, $DMT); 
echo $newData; 

?> 
+0

downvoting: está mal formateado, es mucho más complicado que otras respuestas sin explicación alguna. – CaringDev

+0

te resulta difícil? ingrese un valor de 4? $ newData = data_time (t, '+', 5, día); – Viktor

+0

puede cambiar un caso a variables o valores booleanos. Esta solución incluye muchas características, "seg., Mín., Horas, días, meses, años". Por favor, muestre su solución, esto me resulta útil. Y lo siento por mis chicos ingleses, estoy aprendiendo. Acabo de mostrar lo que escribí mientras estudiaba en casa, y no copié ni pegué. Tal vez sea de ayuda para alguien. – Viktor

0
UPDATE table SET field = DATE_ADD(field, INTERVAL 4 HOURS); 

Por lo tanto es útil en php para añadir fucntion a la columna

Cuestiones relacionadas