Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja która zwraca następny/poprzedni dzień dla podanej daty
Civil
post 5.04.2007, 18:20:57
Post #1





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Czy pisał ktoś z Was funkcję, która zwróci następny, poprzedni dzień - jeżeli poda się jej datę dzienną? Np. podaje jej 31-03-2007 a ona zwróci mi 1-04-2007.
Go to the top of the page
+Quote Post
crash
post 5.04.2007, 18:27:55
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


Jest wiele możliwości na napisanie czegoś takiego, moja (dość nietypowa) propozycja:

  1. <?php
  2. $date = '31-03-2007';
  3.  
  4. echo date( 'd-m-Y', strtotime( '-1 day', strtotime( $date ) ) );
  5. echo '<br/>' . $date . '<br/>';
  6. echo date( 'd-m-Y', strtotime( '+1 day', strtotime( $date ) ) );
  7. ?>


--------------------
Go to the top of the page
+Quote Post
Civil
post 5.04.2007, 18:55:33
Post #3





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


dzięki, przetestuję ją w praktyce.

nie działa.

Dla 4-4-2007

$beforeday=date('j-n-Y', strtotime( '-1 day', strtotime($that_date) ) );

zwraca mi
27-9-2009

A dla 29-9-2009 ... coś w 2035 roku.
Go to the top of the page
+Quote Post
franki01
post 5.04.2007, 19:10:10
Post #4





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  1. <?php
  2. function next_day($str) {
  3.  $data = explode('-', $str);
  4.  $next_day = date("j-n-Y", mktime(3,0,0,$data[1],$data[0],$data[2]));
  5.  return $next_day;
  6. }
  7.  
  8. echo next_day('31-01-2007'); // powinno pokazac 1-2-2007 albo jakos tak
  9. ?>
Go to the top of the page
+Quote Post
Civil
post 5.04.2007, 19:32:18
Post #5





Grupa: Zarejestrowani
Postów: 86
Pomógł: 1
Dołączył: 19.09.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


to zwraca ten sam dzień smile.gif
Go to the top of the page
+Quote Post
crash
post 5.04.2007, 20:15:53
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 196
Pomógł: 2
Dołączył: 17.01.2004
Skąd: Sosnowiec

Ostrzeżenie: (0%)
-----


franki01: W Twojej funkcji brakuje dodawania/odejmowania dnia w mktime" title="Zobacz w manualu PHP" target="_manual, no ale nie do końca będzie to działać dobrze np. przy 1 czy 31 dniu miesiąca, bo wyjdzie z tego albo zerowy albo 32 dzień miesiąca...

Civil: Zdecyduj się na jakis ujednolicony format daty np. DD-MM-YYYY to nie bedzie problemów, albo możesz:

  1. <?php
  2. $date = explode( '-', $date );
  3. $date = sprintf( '%02d-%02d-%04d', $date[ 0 ], $date[ 1 ], $date[ 2 ] );
  4. ?>


Ten post edytował crash 5.04.2007, 20:16:38


--------------------
Go to the top of the page
+Quote Post
franki01
post 5.04.2007, 21:44:18
Post #7





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


A tak. Sorry bardzo biggrin.gif Poprawka:

  1. <?php
  2. function next_day($str, $days) {
  3.  $data = explode('-', $str);
  4.  $next_day = date("j-n-Y", mktime(3,0,0,$data[1],$data[0],$data[2]) + ($days * 24 * 3600));
  5.  return $next_day;
  6. }
  7.  
  8. echo next_day('31-01-2007', 1); // powinno pokazac 1-2-2007 albo jakos tak
  9. ?>


Drugi argument to ilosc dodanych dni (wartosc -1 to dzien wstecz. -2 to 2 dni wstecz itd).
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 21:25