Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obliczenie dni pomiędzy datami, gdzie jest błąd ?
Lacki2006
post 23.04.2014, 12:33:49
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


Witam
Potrzebuję obliczyć ile dni minęło od daty ale wychodzą mi jakieś kosmiczne liczby gdzie tkwi błąd ?
Mam tak napisany kod
Kod
// Obliczenie ile dni jest zlecenie w produkcji
    $data = '13/04/2014'; //nasza data
    $obecna_data = date("d-m-Y"); // pobieranie aktualnej daty
    $minelo = (strtotime($obecna_data) - strtotime($data)) / (60*60*24); //obliczanie
    $wynik = round("$minelo"); //zaokraglenie do pelnej  
        echo 'dni '. $wynik;

Z tego kodu wylicza mi że upłynęło 16183 dni smile.gif pomimo iż minęło zaledwie 10 dni smile.gif
Myślę że problem może tkwić w różnie zapisanej dacie bo w dacie mam dd/mm/rok a w obecnej dacie mam dd-mm-rok niestety to co jest w $data czyli dd/mm/rok musi zostać czy macie jakiś pomysł jak zrobić aby wyliczało dobrze ?
Z góry dziękuję


--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
skowron-line
post 23.04.2014, 12:38:52
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. echo date('d', $minelo); // tylko bez tego dzielenie

a jak nie pomoze to zobacz czy dobrze przeksztalca dd/mm/YYYY
I dlaczego nie uzyjesz do tego
  1. new DateTime();


Ten post edytował skowron-line 23.04.2014, 12:39:38


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 12:53:57
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


Zrobiłem tak jak napisałeś
[cod]

// Obliczenie ile dni jest zlecenie w produkcji
$data = '13/04/2014'; //nasza data
$obecna_data = date("d-m-Y"); // pobieranie aktualnej daty
$minelo = (strtotime($obecna_data) - strtotime($data)) ; //obliczanie
$minelo = date('d', $minelo);
$wynik = round("$minelo"); //zaokraglenie do pelnej

[/cod]

i teraz zamiast 10 wychodzi 23 dni zawsze to już bliżej smile.gif



--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
Greg0
post 23.04.2014, 13:11:20
Post #4





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Może użyj dobroci klas w PHP smile.gif
  1. $date1 = new DateTime();
  2. $date2 = new DateTime('13-04-2014');
  3.  
  4. var_dump($date1->diff($date2));
  5. var_dump($date1->diff($date2)->days);
Go to the top of the page
+Quote Post
freemp3
post 23.04.2014, 13:15:03
Post #5





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

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


Cytat
[cod]
?
Na początek proponuję zapoznać się z formatami dat w PHP:
http://www.php.net/manual/en/datetime.formats.date.php

Następnie popraw pierwszą datę ponieważ ma zły format.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 13:23:22
Post #6





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


A czy da się pobrać obecną datę w takim formacje
mam teraz tak date("Y-m-d") a potrzebował bym tak date("Y/m/d")



--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
Greg0
post 23.04.2014, 13:25:03
Post #7





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


@freemp3 to już swoją drogą.
Ale jeśli tak ma w bazie pozapisywane (co nie powinno wystąpić) to można z tego wybrnąć w ten sposób (modyfikacja mojego poprzedniego postu)
  1. $date1 = new DateTime();
  2. $date2 = DateTime::createFromFormat('d/m/Y', '13/04/2014');
  3.  
  4. var_dump($date1->diff($date2));
  5. var_dump($date1->diff($date2)->days);


Ten post edytował Greg0 23.04.2014, 13:26:00
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 13:38:16
Post #8





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


Jeszcze jedno pytanie bo się pogubilem źle ustawiłem format daty tak
źle jest (d/m/Y) a prawidłowy format to (d-m-Y)
Tak czy dobrze to zrozumiałem ?


--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
Greg0
post 23.04.2014, 13:42:27
Post #9





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


@freemp3 podał ci linka
Prawidłowe notacje ze slashami to
miesiąc/dzień/rok lub rok/miesiąc/dzień
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 15:51:33
Post #10





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


a czy da się prze konwertować taki format daty "13/04/2014" na taki "13-04-2014" taki zapis rozwiąże mój problem ?


--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
Greg0
post 23.04.2014, 15:56:34
Post #11





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Nie wiem teraz o jaki problem ci chodzi. Rozwiązanie problemu "różnica pomiędzy datami" masz w moim poście, dokładnie w tym http://forum.php.pl/index.php?s=&showt...t&p=1103453
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 16:08:31
Post #12





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


W dalszym ciągu mam problem z obliczeniem dni pomiędzy datami jest tak
Kod
        
        $data = '13/04/2014'; //nasza data
    $obecna_data = date("d-m-Y"); // pobieranie aktualnej daty
    $minelo = (strtotime($obecna_data) - strtotime($data)); //obliczanie
    $minelo = date('d', $minelo);
    $wynik = round("$minelo"); //zaokraglenie do pelnej

W zmiennej $data jest wartość pobrana z bazy danych ale o takie wartości i formacje '13/04/2014' nie może być inna.
Jak zmienię wartość zmiennej $data na '13-04-2014' to wszystko wylicza bez zastrzeżeń więc rozwiązaniem mojego problemy było by zamiana slash na myślniki.

Próbowałem wstawić to co napisałeś ale z tym mi też nie chce działać aby pobrało ilość dni do zmiennej $wynik.



--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
Go to the top of the page
+Quote Post
Greg0
post 23.04.2014, 16:12:05
Post #13





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


To pokaż jak próbowałeś bo jestem na 100% pewny że zrobiłeś to źle.
Go to the top of the page
+Quote Post
Prezi2907
post 23.04.2014, 17:23:51
Post #14





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


Cytat(Lacki2006 @ 23.04.2014, 17:08:31 ) *
W dalszym ciągu mam problem z obliczeniem dni pomiędzy datami jest tak
Kod
        
        $data = '13/04/2014'; //nasza data
    $obecna_data = date("d-m-Y"); // pobieranie aktualnej daty
    $minelo = (strtotime($obecna_data) - strtotime($data)); //obliczanie
    $minelo = date('d', $minelo);
    $wynik = round("$minelo"); //zaokraglenie do pelnej

W zmiennej $data jest wartość pobrana z bazy danych ale o takie wartości i formacje '13/04/2014' nie może być inna.
Jak zmienię wartość zmiennej $data na '13-04-2014' to wszystko wylicza bez zastrzeżeń więc rozwiązaniem mojego problemy było by zamiana slash na myślniki.

Próbowałem wstawić to co napisałeś ale z tym mi też nie chce działać aby pobrało ilość dni do zmiennej $wynik.

  1.  
  2. $data = '13/04/2014'; #twoja data
  3. $data = str_replace("/","-", $data); #zmiana na myślniki
  4. $obecna_data = date("Y-m-d"); #ogólnie format stosowany w bazach danych itd - nie wiem jakiej ty bazy używasz że masz taki format daty
  5. $minelo = (strtotime($obecna_data)-strtotime($data)); # różnica
  6. $dni = date('d', $minelo); # ilość dni
  7. $wynik = round($dni, 0); #pełna liczba
  8.  
  9. echo " Czas w sekundach : " . $minelo . " - czas w dniach : " . $dni . " == wynikowi tj : " . $wynik;

Jak to nie działa to masz zepsuty serwer... smile.gif
Go to the top of the page
+Quote Post
Lacki2006
post 23.04.2014, 18:37:50
Post #15





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 3.03.2012

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


Działa o to właśnie chodziło .
Wielkie dzięki


--------------------
----------------------------------------------------------------------------
Najlepsza scianka reklamowa z darmową dostawą w całej polsce.
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: 1.05.2025 - 05:51