2010-11-04 21 views
5

Potrzebuję wykonać trochę bardziej skomplikowane obliczenia z wartościami czasu i dat z mojej bazy danych MySQL z PHP.Jak obsługiwać datę i godzinę w PHP?

Potrzebuję dodać lub odjąć różne wartości od podanej daty.

Na przykład:

  • odjęcie 1 miesiąc
  • odjęcie 30 dni
  • odjęcie 4 tygodnie
  • dodanie 4 miesiąc
  • dodanie 3 Miesiąc
  • Dodanie 90 dni
  • Dodawanie 2 lata

Należy zauważyć, że istnieje różnica między odejmowaniem 1 Miesiąc, 4 Tygodni lub 30 Dni.

Jaki jest preferowany sposób robienia tego? Czy istnieje jakaś sprytna biblioteka, czy mogę to zrobić z własnymi funkcjami PHP?

Odpowiedz

7

Od http://php.net/manual/en/function.strtotime.php

<?php 
echo strtotime("now"), "\n"; 
echo strtotime("10 September 2000"), "\n"; 
echo strtotime("+1 day"), "\n"; 
echo strtotime("+1 week"), "\n"; 
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; 
echo strtotime("next Thursday"), "\n"; 
echo strtotime("last Monday"), "\n"; 
?> 

Można dodać drugi parametr, aby dodać do danej chwili:

echo strtotime("+1 week",$timestamp) 
1

Funkcja PHP strtotime jest bardzo silny w tym zakresie.

Na przykład:

// 1 month ago 
$date = strtotime('-1 month'); 

// 30 days ago 
$date = strototime('-30 days'); 
0

try Gruszka Data biblioteka. Bardzo wydajny i elastyczny, z możliwością dodawania okresów. Robi dokładnie to, co chcesz.

http://pear.php.net/Date

Używamy go w bardzo intensywnie data aplikacji internetowych, gdzie musimy dodać wiele okresów czasowych zmiennych i obliczyć liczbę tygodni itd

1
<?php 
$date = date_create('2000-01-01'); 
date_add($date, date_interval_create_from_date_string('10 days')); 
echo date_format($date, 'Y-m-d'); 
?> 

$ data będzie teraz "2000-01-11".

Możesz również użyć date_sub, aby odjąć określoną ilość czasu.

Więcej tutaj:

http://www.php.net/manual/en/datetime.add.php http://www.php.net/manual/en/datetime.sub.php

5

Można użyć kombinacji PHP5 na DateTime i DateInterval obiektów.

$now = new DateTime(); 

// 30 days ago 
$now->sub(new DateInterval("P30D"); 

// 1 week ago 
$now->sub(new DateInterval("P1W"); 

// 2 years from now 
$now->add(new DateInterval("P1Y"); 

Listę kodów przerwie zobaczyć the manual

+0

+1 Ale należy pamiętać, że jest to tylko dla php5.3 -> http://www.php.net/manual/en/dateinterval.construct.php – AntonioCS

+1

Możesz użyć metody modify() z DateTime w 5.2 – StasM

0

oto kolejna propozycja. jeśli chcesz manipulować informacjami z mysql, spróbuj użyć funkcji daty/czasu dostarczonej przez mysql here

4

Od PHP 5.2 masz obiekt DateTime. można zrobić:

$date = new DateTime; // now 
$date->modify('1 month ago'); 
echo $date->format('Y-m-d'); 

Sprawdź this link dla całego sintax.

Powiązane problemy