Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Wyliczanie liczby dni na podstawie daty ?
-plejaz-
post 11.08.2017, 14:32:54
Post #1





Goście







Witam, czy jest możliwość wyliczenia przy pomocy php liczby dni na podstawie daty, która jest zwracana z bazy danych ?

Mam 3 kolumny:
W dwóch pierwszych $od i $do wpisuję ręcznie daty w formacie DD-MM-RRRR
Trzecią kolumnę $wynik chcę zrobić wynikiem w formie liczby dni $od - $do = $wynik
  1. <?php
  2. $sql = "SELECT * FROM work where 1";
  3. if( isset($_GET['char']) ){
  4. $sql .= " and LEFT(rodzaj,20)='".$_GET['char']."' ";
  5. }
  6. $sql .=" ORDER BY id DESC";
  7. $result = mysqli_query($mysqli,$sql);
  8. $sno = 1;
  9. while($fetch = mysqli_fetch_array($result)){
  10. $id = $fetch['id'];
  11. $rodzaj=$fetch['rodzaj'];
  12. $od=$fetch['od'];
  13. $do=$fetch['do'];
  14. ?>
  15.  
  16. <td align="center"><?php echo $sno; ?></td>
  17. <td align="center"><?php echo $rodzaj; ?></td>
  18. <td align="center"><?php echo $od; ?></td>
  19. <td align="center"><?php echo $do; ?></td>
  20. <td align="center">TUTAJ WYNIK BĘDĄCY RÓŻNICĄ $do - $od</td>


Ten post edytował plejaz 11.08.2017, 14:33:30
Go to the top of the page
+Quote Post
nospor
post 11.08.2017, 14:35:52
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pisales mi na PW ze wiesz jak uzywac diff.
Jaki wiec masz problem by wstawic do diff zmienne $od oraz $do?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-plejaz-
post 11.08.2017, 14:59:18
Post #3





Goście







Problem mam taki, że nie potrafię tego zaimplementować, próbowałem różnych wariantów pracy z funkcją diff,.
Wiem jak odjąć daty wpisane ręcznie, ale nie wiem jak odjąć daty, które są wyświetlane z bazy danych.
Przykład jaki chcę zastosować to:
  1. $d1 = new DateTime("09.08.2017");
  2. $d2 = new DateTime("11.08.2017");
  3. echo $d1->diff($d2)->days;

Wynik mam zwracany jako 2, a powinno być 3.
Go to the top of the page
+Quote Post
trueblue
post 11.08.2017, 15:01:49
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


I wynik jest prawidłowy.
Od północy 9-tego do północy 10-tego, to 1 dzień. Od północy 10-tego do północy 11-tego, to kolejny dzień.
Razem 2 dni.


--------------------
Go to the top of the page
+Quote Post
nospor
post 11.08.2017, 15:08:15
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cool, a ja sie poraz kolejny pytam jaki masz problem by wstawic tam zmienne?

  1. $d1 = new DateTime($od);
  2. $d2 = new DateTime($do);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-plejaz-
post 11.08.2017, 15:09:36
Post #6





Goście







Matematyczny wynik jest ok, a jak uwzględnić 11.08 jako włącznie ? Wtedy mam 09, 10, 11 - czyli 3 dni.
Go to the top of the page
+Quote Post
trueblue
post 11.08.2017, 15:11:16
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A jak z dwójki robisz trójkę?


--------------------
Go to the top of the page
+Quote Post
-plejaz-
post 11.08.2017, 15:32:16
Post #8





Goście







Cytat(nospor @ 11.08.2017, 16:08:15 ) *
Cool, a ja sie poraz kolejny pytam jaki masz problem by wstawic tam zmienne?

  1. $d1 = new DateTime($od);
  2. $d2 = new DateTime($do);

Robiłem tak i wynik zwracany mam jako "0".
W tabeli bazy danych ustawiałem typ jako DATE i VARCHAR i nie mogę uzyskać wyniku.
  1. <?php
  2. $sql = "SELECT * FROM work where 1";
  3. if( isset($_GET['char']) ){
  4. $sql .= " and LEFT(rodzaj,20)='".$_GET['char']."' ";
  5. }
  6. $sql .=" ORDER BY id DESC";
  7. $result = mysqli_query($mysqli,$sql);
  8. $sno = 1;
  9. while($fetch = mysqli_fetch_array($result)){
  10. $id = $fetch['id'];
  11. $rodzaj=$fetch['rodzaj'];
  12. $od=$fetch['od'];
  13. $do=$fetch['do'];
  14. $d1 = new DateTime($od);
  15. $d2 = new DateTime($do)
  16. ?>
  17.  
  18. <td align="center"><?php echo $sno; ?></td>
  19. <td align="center"><?php echo $rodzaj; ?></td>
  20. <td align="center"><?php echo $od; ?></td>
  21. <td align="center"><?php echo $do; ?></td>
  22. <td align="center"><?php echo $d1->diff($d2)->days;?></td>


Cytat(trueblue @ 11.08.2017, 16:11:16 ) *
A jak z dwójki robisz trójkę?

Nie bardzo rozumiem Twoje pytanie.
Go to the top of the page
+Quote Post
nospor
post 11.08.2017, 15:40:47
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To pokaz co zawiersa $od.
Moze masz zly format.

var_dump($od);
var_dump($do);


Co do zrobienia z 2 3 naprawde nie wiesz ze trzeba zrobic:
2 + 1 = 3
?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 11.08.2017, 15:49:09
Post #10





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

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


Trzeba też pamiętać że ma być poprawna strefa czasowa ustawiona.


--------------------
Go to the top of the page
+Quote Post
-plejaz-
post 11.08.2017, 15:54:27
Post #11





Goście







Cytat(nospor @ 11.08.2017, 16:40:47 ) *
To pokaz co zawiersa $od.
Moze masz zly format.

var_dump($od);
var_dump($do);

string(10) "08.08.2017" string(10) "11.08.2017" - te wartości są wpisane ręcznie w bazie danych.
Cytat
Co do zrobienia z 2 3 naprawde nie wiesz ze trzeba zrobic:
2 + 1 = 3
?

przemilcze...

Ok działa, problemem był zły ciąg znaków w bazie danych.


Ten post edytował plejaz 11.08.2017, 16:20:02
Go to the top of the page
+Quote Post
Puszy
post 16.08.2017, 14:37:37
Post #12





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Dodanie 1 do wyniku nie rozwiąże problemu. W przypadku gdy autor tematu będzie chciał wyliczyć róźnicę między 1.01 12:30 a 1.01 14:30 zwróci sobie 1 dzień. Problem leży w definicji słowa dzień. Skrypt który który zwracał 2 zwracał informację o dobach które minęły, idąc dalej można pokusić się o reguły definiujące kiedy zaczyna się nasz "dzień" (np jeżeli będzie to wykorzystywane jako dni pracy). Moim zdaniem samo dorzucenie +1 może być w mylące.
Go to the top of the page
+Quote Post
nospor
post 16.08.2017, 14:39:19
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ale w tym przypadki mowimy o tych samych godzinach (a przynajmniej tak wynika z kodu) wiec nie bedzie problemu o ktorym wspomniales


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Puszy
post 16.08.2017, 15:02:07
Post #14





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

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


Jeżeli pominiemy godziny to i tak wg mnie różnica między datami równa 2 jest poprawną odpowiedzią jednak z różnych przyczyn autor tematu chce mieć 3, pytanie czy dla różnicy 1.01 a 1.01 chce otrzymać 0 czy jednak 1?

Ten post edytował Puszy 16.08.2017, 15:02:40
Go to the top of the page
+Quote Post
trueblue
post 16.08.2017, 15:30:47
Post #15





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Autor dał odpowiedź w poście numer 6.


--------------------
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: 19.07.2025 - 08:41