2009-11-02 6 views
13

Pracuję nad migracją blogu z niestandardowego bloga do Wordpressa. Jednym z pól poszukiwanych przez Wordpress w bazie danych jest datownik/czas ustawiony na GMT, czyli 4 godziny przed czasem. Zasadniczo potrzebuję więc pobrać nasz datownik/czas (w formacie RRRR-MM-DD HH: MM: SS) i dodać do niego cztery godziny. Szukałem polecenia MySQL "ADDTIME", ale myślę, że działa tylko na selekcji, a nie na insertach.Jak dodać 4 godziny do czasu w PHP/MySQL

Zrobiłem scenariusz, który eksplodował datę na części i dodał 4 godziny do czasu, ale wynikająca z tego logika, która byłaby wymagana do sprawdzenia, kiedy 4 godziny wpada na następny dzień/miesiąc/rok wydawało się trochę przesadzone.

+1

Nic nie uniemożliwia robi to w bazie danych.Można przenieść dane z istniejącej bazy danych bez zmiany znaczników czasu, a następnie ZAKTUALIZUJ blog_table SET blog_timestamp = DATE_ADD (blog_timestamp, INTERVAL 4 GODZINY); - który osiągnąłby to, co chcesz. – artlung

Odpowiedz

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

Co o:

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

lub nawet

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

może potrzebować trochę sprawdzania błędów, ale powinno rozwiązać problem.

14

Nic nie zapobiega ADDTIME() zostały użyte w INSERT LUB UPDATE, ale DATE_ADD() jest chyba to, co będzie najlepsze:

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 field = DATE_ADD (pole, INTERVAL 4 GODZINY);' jest nieco bardziej ogólny :) – jensgram

+0

Przypuszczałem, że SerpicoLugNut już wyodrębnił znaczniki czasu, tak że była to składnia, której użyłem. Każdy wyodrębniony znacznik czasu będzie wyglądał w ten sposób na INSERT. Zabawne, dodałem ogólny format jako komentarz powyżej, kiedy opuściłeś swoje. :-) – artlung

+2

To jest 'INTERWAŁOWA 4 GODZINA ', a nie' INTERWAL 4 GODZ. 'Na MySQL 5.5.44 –

3

Albo lepiej w SQL

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

Wygląda TZ twojej bazy danych jest ustawiona na GMT (UTC), która jest taka jaka powinna być. Konwertuj lokalną datę na GMT podczas dodawania do bazy danych.

z MySQL 5,1 odniesienia podręcznika:

CONVERT_TZ(dt,from_tz,to_tz) 

CONVERT_TZ() konwertuje wartość DateTime dt ze strefy danym czasie przez from_tz do strefy czasowej, określonej przez to_tz i zwraca otrzymaną wartość. Strefy czasowe można określić w sposób opisany w Sekcja 5.10.8, "Obsługa strefy czasowej serwera MySQL". Ta funkcja zwraca wartość NULL, jeśli argumenty są niepoprawne.

Jeśli wartość nie mieści się w obsługiwanym zakresie typu TIMESTAMP po przekonwertowaniu fom from_tz na UTC, konwersja nie występuje. Zakres TIMESTAMP jest opisany w rozdziale 11.1.2, "Przegląd dat i typów czasu".

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

uwaga: aby symboliczne strefy czasowe działały (GMT, PST), musisz skonfigurować tabele związane z strefą czasową w mysql baza danych (zoneinfo). – dar7yl

2

za wszystkie odpowiedzi z wykorzystaniem DATE_ADD, poprawna składnia jest "4 godziny", nie "4 godzinach" (przynajmniej w obecnej wersji MySQL):

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

0

użyłem ta metoda:

$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

Jeśli używasz (dzień/miesiąc/rok) [brazylijski format daty] jak poniżej, to nie działa:

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

echo "Data serwera/godzina".$ todays_date;

echo "data/serwer godziny + 2 godziny" .date ("d/m/Y H: i: s" strtotime ("$ todays_date + 2 godziny"));

Wynik: data

Server/godzina                   10/04/2012 07:44:36

Data Server/hou r + 2 godziny     04/10/2012 09:44:36


Trzeba was (miesiąc/dzień/rok) i działa idealnie:

$ todays_date = date ("m/d/YH: i: s"); echo "Data serwera/godzina".

$ todays_date. "
"; echo "" Data Server/godzinę i 2 godziny ".date (" M/D/YH: i: s”strtotime ("$ todays_date + 2 godziny"));

Wynik:

daty/godziny Server                     04/10/2012 07:44:36

Data Server/godzina + 2 godziny     04/10/2012 09:44:36

0

Working 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 to znacznik wartości zawartości od mysql

Wynik będzie następujący: "Ostatnia aktualizacja: 2015-02-05 w 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: jest źle sformatowany, znacznie bardziej skomplikowany niż inne odpowiedzi bez żadnego wyjaśnienia. – CaringDev

+0

uważasz, że jest to trudne? wpisać 4 wartość? $ newData = data_time (t, '+', 5, day); – Viktor

+0

można zmienić wielkość liter na wartości zmienne lub boolowskie. To rozwiązanie zawiera wiele funkcji, "sekundy, minuty, godziny, dni, miesiące, lata". Proszę pokazać swoje rozwiązanie, pomocne dla mnie. I przepraszam za moich angielskich facetów, uczę się. Po prostu pokazałem, co napisałem podczas nauki w domu, a nie skopiowałem i wkleiłem. Może być to pomoc dla kogoś. – Viktor

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

Stąd jest przydatna w PHP do dodawania fucntion do kolumny

Powiązane problemy