2009-11-02 4 views
13

Je travaille sur une migration de blog à partir d'un blog personnalisé vers Wordpress. L'un des champs que Wordpress recherche dans la base de données est un horodatage défini sur GMT, soit 4 heures d'avance sur notre temps. Donc, je dois essentiellement prendre notre horodatage (au format AAAA-MM-JJ HH: MM: SS), et ajouter quatre heures à cela. Je regardais la commande MySQL "ADDTIME", mais je pense que cela ne fonctionne que sur les sélections, pas sur les insertions. J'ai travaillé un script qui a fait exploser la date dans les parties, et ajouté 4 heures à l'heure, mais la logique qui s'ensuivrait pour vérifier quand 4 heures repasse au jour suivant/mois/année semblait un peu excessif.Comment ajouter 4 heures à l'heure dans PHP/MySQL

+1

Il n'y a rien qui vous empêche de le faire dans la base de données.Vous pouvez migrer les données depuis la base de données existante sans modifier les horodatages, puis faites UPDATE blog_table SET blog_timestamp = DATE_ADD (blog_timestamp, INTERVAL 4 HEURES); - qui accomplirait ce que vous voulez. – artlung

Répondre

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

Qu'en est-:

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

ou même

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

aurait besoin d'un peu de vérification des erreurs, mais devrait résoudre votre problème.

14

Il n'y a rien qui empêche ADDTIME() d'être utilisé dans un INSERT OU UPDATE, mais DATE_ADD() est probablement ce qui fonctionnera le mieux:

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

'Table UPDATE Champ SET = DATE_ADD (champ, INTERVAL 4 HEURES);' est un peu plus générique :) – jensgram

+0

Je supposais que SerpicoLugNut avait déjà extrait des horodatages, donc c'était la syntaxe que j'utilisais. Chaque horodatage extrait finirait par ressembler à INSERT. Drôle, j'ai ajouté le format générique comme commentaire ci-dessus juste quand vous avez quitté le vôtre. :-) – artlung

+2

C'est 'INTERVAL 4 HEOUR' et pas' INTERVAL 4 HEURES' sur MySQL 5.5.44 –

3

Ou mieux dans SQL

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

Il semble que le TZ de votre base de données est mis à GMT (UTC), qui est comme il se doit. Vous devez convertir votre date locale en GMT lors de l'ajout à la base de données.

du MySQL 5.1 Reference Manual:

CONVERT_TZ(dt,from_tz,to_tz) 

CONVERT_TZ() convertit une valeur datetime dt de fuseau horaire donnée par FROM_TZ à la zone de temps donnée par to_tz et renvoie la valeur résultante. Les fuseaux horaires peuvent être spécifiés comme décrit à la Section 5.10.8, «Prise en charge du fuseau horaire du serveur MySQL». Cette fonction renvoie NULL si les arguments sont invalides.

Si la valeur tombe en dehors de la plage prise en charge du type TIMESTAMP lors de la conversion de f_t_tz en UTC, aucune conversion ne se produit. La plage TIMESTAMP est décrite à la Section 11.1.2, «Aperçu des types de date et d'heure».

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

note: pour les fuseaux horaires symboliques au travail (GMT, PST), vous devez configurer les tables liées au fuseau horaire dans le mysql base de données (zoneinfo). – dar7yl

2

Pour toutes les réponses à l'aide DATE_ADD, la syntaxe correcte est "4 HEURE" non "4 HEURES" (au moins dans la version actuelle de MySQL):

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

0

J'ai utilisé cette méthode:

$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 vous utilisez (jour/mois/année) [format de la date du Brésil] comme ci-dessous, il ne fonctionne pas:

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

echo "Date/heure du serveur".$ todays_date;

echo "Server Date/heure + 2 heures" .date ("d/m/Y H: i: s", strtotime ("todays_date de $ + 2 heures"));

Résultat:

Date serveur/heure                   10/04/2012 07:44:36

Date de serveur/hou r + 2 heures     04/10/2012 09:44:36


Vous devez vous (mois/jour/année) et il fonctionne parfaitement:

$ todays_date = date ("m/d/YH: i: s"); echo "Date du serveur/heure".

$ aujourdhui. "
"; echo "" date Server/heure + 2 heures ".Date (" m/d/YH: i: s », strtotime ("todays_date de $ + 2 heures"));

Résultat:

Server Date/heure                     04/10/2012 07:44:36

Server Date/heure + 2 heures     04/10/2012 09:44:36

0

de travail 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 est un horodatage de contenu de valeur de mysql

Le résultat sera comme ceci "La dernière mise à jour date du: 2015-02-05 à 05: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: ceci est mal formaté, beaucoup plus compliqué que les autres réponses sans aucune explication. – CaringDev

+0

vous le trouvez difficile? entrez une valeur 4? $ newData = data_time (t, '+', 5, jour); – Viktor

+0

vous pouvez changer un cas en variables ou en valeurs booléennes. Cette solution comprend un grand nombre de fonctionnalités, "sec, min, heures, jours, mois, années" S'il vous plaît montrer votre solution, ce qui est utile pour moi. Et désolé pour mes gars anglais, j'apprends. Je viens de montrer ce que j'ai écrit pendant mes études à la maison, et non copié et collé. Peut-être son aide sur quelqu'un. – Viktor

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

Il est donc utile en php pour ajouter à la colonne fucntion

Questions connexes