Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z datą
Forum PHP.pl > Forum > Przedszkole
Daiszman
Witajcie , nie mogę przebrnąć przez taki temat
Mam skrypt który ma sprawdzić ile dni minęło od daty do daty i zakolorować tło w ramce

  1. <div class="zegar" style="';
  2. $data1 = "2019-03-05 09:52:33";
  3. $datetime1 = new DateTime('NOW');
  4. $datetime2 = new DateTime($data1);
  5. $interval = $datetime1->diff($datetime2);
  6.  
  7. echo '>';
  8. if($interval >= 0) echo'background-color:#fff';
  9. elseif($interval< -60) echo'background-color:#000';
  10. echo' color:black;">';
  11. echo $interval->format('%R%a');
  12. echo'
  13. </div>


problem chyba leży w tym że $interval nie jest liczbą całkowitą tutaj , czy coś innego?
trueblue
  1. $interval = $datetime1->diff($datetime2)->format('%R%a');
Daiszman
mam problem taki że jak chce teraz do $interval dodać np liczbe 22 wyrzuca mi

  1. Warning: A non-numeric value encountered in /var/www/html/


nospor
To moze pokaz jak ty to dodajesz. Juz tyle czasu na forum moglbys wiedziec jak podawac informacje by uzyskac pomoc
Daiszman
Przepraszam

kod mam tak początek kodu jest w pierwszym poście....

  1. $monitCzasuPracy= 10;
  2. if($interval <= -30 && $doc === "Z") { echo'<img src="ikony/5.png" width="15px" hight="15px";><b>'.$monitCzasu+$monitCzasuPracy.' ! </b></div>';
nospor
No i gdzie w tym kodzie ty cos dodajesz?
Daiszman
  1. .$monitCzasu+$monitCzasuPracy.


gdzie $monitCzasuPracy=10
a $monitCzasu jest przyrównany do
  1. $data1 = $doc['dateModified'];
  2. $datetime1 = new DateTime('NOW');
  3. $datetime2 = new DateTime($data1);
  4. $interval = $datetime1->diff($datetime2)->format('%R%a');
  5. $monitCzasu = $interval;
nospor
poza tym $interval jest obiektem klasy DateInterval wiec niby czemu porownujesz to z liczbami ot tak sobie?
Daiszman
no własnie domyślam się ze o to moze chodzić tutaj , ale czy można go sprowadzić do liczby żeby na nim operacje wykonać?
nospor
https://www.php.net/manual/en/class.dateinterval.php
Masz tam dosc wyraznie napisane jak dobrac sie do liczb, ktore cie interesuja
miccom
A zamień datę na timestamp i dodawaj liczby do siebie smile.gif
Chyba najłatwiejsze rozwiązanie smile.gif
trueblue
Cytat(nospor @ 11.03.2020, 09:22:41 ) *
poza tym $interval jest obiektem klasy DateInterval wiec niby czemu porownujesz to z liczbami ot tak sobie?

Nie jest, bo jest formatowany i otrzymujemy string.
Daiszman
Cytat(miccom @ 11.03.2020, 09:29:12 ) *
A zamień datę na timestamp i dodawaj liczby do siebie smile.gif
Chyba najłatwiejsze rozwiązanie smile.gif

no w sumie - hmmm
aż tak mądry nie jestem ale spróbuję
trueblue
Lepiej sprawdź co zawiera zmienna $doc.
Już w temacie o warunku IF, o tym samym pisaliśmy.

Raz pobierasz wartość z indeksu: $doc['dateModified'], a innym razem porównujesz zmienną ze stringiem: $doc === "Z"
Jeśli zmienna jest tablicą, to na pewno nie porównasz jej ze stringiem, a jeśli jest stringiem, to na pewno nie tablicą.
Daiszman
$doc['dateModified'] jest datą
$doc to jest inna zmienna

mnie interesuje do $interval dodanie określonej liczby tak żeby w momencie gdy wykazuje -30 pokazał -20 jesli np $monitCzasuPracy=10
nospor
Cytat
Nie jest, bo jest formatowany i otrzymujemy string.

Tam masz tez wlasciwosci klasa takie jak
public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;
public float $f ;
public integer $invert ;
public mixed $days ;

poza tym nawet jakbys sie upieral przy funkcji FORMAT() to jaki problem jej powiedziec by zwrocila dni a potem zamienic to na liczbe przy pomocy zwyklego rzutowania (int) ?
trueblue
Cytat(nospor @ 11.03.2020, 09:55:58 ) *
To ze nie ogarniasz podstaw klas, nie znaczy ze nie jest tongue.gif

Tam masz tez wlasciwosci klasa takie jak
public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;
public float $f ;
public integer $invert ;
public mixed $days ;

Pokazujesz strukturę klasy DateInterval, a nie typ zmiennej $interval, który jest stringiem.
Czyli to: $datetime1->diff($datetime2), a nie to: $interval = $datetime1->diff($datetime2)->format('%R%a');

Cytat(nospor @ 11.03.2020, 09:55:58 ) *
poza tym nawet jakbys sie upieral przy funkcji FORMAT() to jaki problem jej powiedziec by zwrocila dni a potem zamienic to na liczbe przy pomocy zwyklego rzutowania (int) ?

Nie upieram się i nie widzę problemu.
Faktem jest, że swobodnie można przeprowadzić dodawanie na $interval, czyli: $monitCzasu+$monitCzasuPracy
Daiszman
Cytat(trueblue @ 11.03.2020, 10:01:52 ) *
Faktem jest, że swobodnie można przeprowadzić dodawanie na $interval, czyli: $monitCzasu+$monitCzasuPracy

HOW?
nospor
Wg wczesniejszych kodow, $interval jest wynikiem funkcji diff() a wiec jest obiektem klasy DateInterval a nie zadnym stringiem
$interval = $datetime1->diff($datetime2);
trueblue
Pokaż wynik:
  1. var_dump($doc['dateModified']);

oraz:
  1. var_dump($doc);


Cytat(nospor @ 11.03.2020, 10:04:51 ) *
Wg wczesniejszych kodow, $interval jest wynikiem funkcji diff() a wiec jest obiektem klasy DateInterval a nie zadnym stringiem
$interval = $datetime1->diff($datetime2);

A wedle późniejszego kodu w poście #7, który komentowałeś w poście #8, nie jest.
nospor
No tak, nie zwrocilem uwagi, ze sie kod zmienial. Moj blad, przepraszam. Na swoja obrone moge powiedziec, ze zmylil mnie fakt, ze jak napisalem czym jest $interval to autor tylko potwierdzil. wink.gif

Cytat
A wedle późniejszego kodu w poście #7, który komentowałeś w poście #8, nie jest.

Zas post #8 pisalem zanim jeszcze sie pojawil post #7 wiec dzialalem na innym kodzie. Fakt, ze Daiszman dowalil post #7 mniej wiecej w tym samym czasie co ja #8 spowodowalo ze wyglada to jak wyglada wink.gif
Daiszman
$doc['dateModified'
string(19) "2020-01-13 14:02:23" ;

drugie string(1) "Z" ;

trueblue
Pokaż więc cały fragment kodu gdzie są warunku IF (to porównanie do "Z") oraz obliczanie $interval.
Daiszman
  1. $data1 = $doc['dateModified'];
  2. $datetime1 = new DateTime('NOW');
  3. $datetime2 = new DateTime($data1);
  4. $interval = $datetime1->diff($datetime2)->format('%R%a');
  5. $monitCzasu = $interval;
  6. ///echo '>';
  7. if($interval >= 0 && $doc['progress'] === "Z") { echo'<div style="background-color: #5DBB4B" ></div>';
  8. } elseif($interval >= 0 && $doc['progress'] === "P") { echo'<div style="background-color: #85C451" ><img src="ikony/gift.png" class="imgpulse" width="15px" hight="15px";></div>';
  9. } elseif(($interval >= -10 && $interval < -1 ) && $doc['progress'] === "Z") { echo'<div style="background-color: #85C451" ><img src="ikony/1.png" width="15px" hight="15px";>'.$interval.'</div>';
  10. } elseif(($interval >= -14 && $interval <=-9 ) && $doc['progress'] === "Z") { echo'<div style="background-color: #ABD34E" ><img src="ikony/2.png" width="15px" hight="15px";>'.$interval.'</div>';
  11. } elseif(($interval >= -24 && $interval <=-15 ) && $doc['progress'] === "Z") { echo'<div style="background-color: #FDC854" ><img src="ikony/3.png" width="15px" hight="15px";>'.$interval.'</div>';
  12. } elseif(($interval >= -29 && $interval <=-25 ) && $doc['progress'] === "Z") { echo'<div tyle="background-color: #F79558" ><img src="ikony/4.png" class="imgpulse" width="15px" hight="15px";>'.$interval.'</div>';
  13. } elseif($interval <= -30 && $doc['progress'] === "Z") { echo'<div class="monit5" data-tooltip="Upłynął limit czasu dla dokumentu '.$doc['clientId'].'. Zwróć dokument do kolejki"><img src="ikony/5.png" width="15px" hight="15px";><b>'.$interval.' ! </b></div>';
  14. } else echo '<div>'. $ monitCzaczu+$monitCzasuPracy'</div>';
trueblue
Popraw to:
'<div>'. $ monitCzaczu+$monitCzasuPracy'</div>';

i daj znać w takim razie co jest nie tak według Ciebie.
Daiszman
ok.... zjarałem buraka ......
temat do usunięcia :/
Dzięki....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.