Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Operacje na datach.
Forum PHP.pl > Forum > PHP
kajzur
  1. <?php
  2. $wynik = date("Y-m-d G:i:s",(strtotime($dane[6]) + (60*60*24*10)));
  3. echo "Aukcja kończy się: <b>".$wynik."</b><br>";
  4. $theend = date("Y-m-d G:i:s");
  5.  
  6. $koniec = date("j",(strtotime($wynik) - strtotime($theend)));
  7. $koniec2 = date("G",(strtotime($wynik) - strtotime($theend)));
  8.  
  9. //echo $koniec;
  10. if($koniec2 > 24)
  11. echo'Więc kończy się za '.$koniec.' dni.
  12. ';
  13. elseif ($koniec < 1)
  14. echo'Więc kończy się za '.$koniec2.' godzin(y).
  15. ';
  16. elseif($koniec2 = 0)
  17. echo'<font color="red">Pozostała mniej niż godzina!</font>
  18. ';
  19. ?>
Witam, mam oto taki problem: Skrypt powyżej miałby spełniac następujące założenie: Do daty z bazy danych dodajemy 10 dni i mamy otrzymaną datę w zmiennej $wynik - i to działa, następnie chciałbym obliczyć ile czasu zostało do tej daty, z czym jest już większy problem, a także, jeśli jest mniej niż 1 dzień do końca, żeby podawało w godzinach, a jeśli poniżej godziny - tekst - Pozostała mniej niż godzina!

Bardzo proszę o pomoc.
erix
Sprawdzaj warunki wykorzystując widełki sekundowe.

Cytat
z czym jest już większy problem, a także, jeśli jest mniej niż 1 dzień do końca, żeby podawało w godzinach, a jeśli poniżej godziny - tekst - Pozostała mniej niż godzina!

Podzielić przez 60 i wyciągać składniki...? Trochę nieprecyzyjnie opisałeś problem...

A tak w ogóle, czemu nie wyciągasz daty bezpośrednio przez np. UNIX_TIMESTAMP, czy time" title="Zobacz w manualu PHP" target="_manual, tylko najpierw po date" title="Zobacz w manualu PHP" target="_manual i tak naokoło? tongue.gif
kajzur
Co to są widełki sekundowe?;x Hmm, a tak jakoś wyszło, że na okrągło, hm, a dużo zyskam jeśli zrobię to w zapytaniu? Jak to powinno wyglądać?
erix
Cytat
Co to są widełki sekundowe?

inaczej: zakresy...

Cytat
Jak to powinno wyglądać?

Przecież napisałem.
kajzur
Co do tego problemu, chodziło mi o to że jak będzie czasu mniej niż 1 dzień, to ma nie pokazać 0 dni, a określoną ilość godzin, a jeśli poniżej godziny, to napis - Pozostała mniej niż godzina!. I stąd są te ify..
marcio
Pomijajac juz to ze nie wiem zabardzo jak pomoc to jednak warto sie przyjrzec ze w ostatnim elseif() masz znak przypisania(=) a nie porownania(==) to tylko taka drobnostka smile.gif
kefirek
Najlepiej na Bazie danych zrobić tak
  1. SELECT *, UNIX_TIMESTAMP(DATE_ADD(DATA ,INTERVAL 10 DAY)) AS unix FROM tabela

I potem tylko

  1. <?php
  2. echo 'Aukcja kończy się: <b>'.date("Y-m-d G:i:s",$dane[6]).'</b><br>';
  3.  
  4. $wynik = time() - $dane[6];
  5. $minut = sprintf(floor($wynik /60)%60);
  6. $sekund = sprintf(floor($wynik)%60);
  7. $godzin = sprintf(floor($wynik/(60*60)%24));
  8. echo "Więc kończy się za Godzin $godzin Minut $minut Sekund $sekund";
  9. ?>


if już sobie chyba dorobisz
okitoki
zbyt wiele kombinujesz, czas zamieniasz na stringa a potem odwrotnie smile.gif, nie rób takich ponieważ powiększasz kod a twój skrypt więcej obciąża niepotrzebnie maszyne

Kod
<?php

$czas_z_bazy = strtotime($dane[6]);
$czas_plus_10dni=  $czas_z_bazy + (86400*10);
$czas_teraz = time();
$do_konca = $czas_plus_10dni - $czas_teraz;

$wynik = date("Y-m-d G:i:s",$czas_plus_10dni);
echo "Aukcja kończy się: <b>".$wynik."</b><br>";


if($do_konca > 86400) echo'Więc kończy się za '.date("j",$do_konca).' dni.';
elseif ($do_konca > 3600) echo'Więc kończy się za '.date("h",$do_konca).' godzin(y).';
elseif($do_konca > 0) echo'<font color="red">Pozostała mniej niż godzina!</font>';
else echo'<font color="red">już po aukcji :)</font>';
?>
kajzur
Wielkie dzięki za pomoc, a juz miałem odpuszczać sobie smile.gif

Jeszcze jedno:
Aukcja ruszyła: 2009-06-10 21:25:36
(...)
Aukcja kończy się: 2009-06-20 21:25:36
Więc kończy się za 10 dni.

A dziś jest 11, więc powinno być chyba 9 dni ;> Jak to można wyjaśnić ;> O i po dodaniu pokazało 11 dni ;>

Kod
$czas_z_bazy = strtotime($dane[6]);
$czas_plus_10dni=  $czas_z_bazy + (86400*10);
$czas_teraz = strtotime(date("Y-m-d G:i:s"));
$do_konca = $czas_plus_10dni - $czas_teraz;

$wynik = date("Y-m-d G:i:s",$czas_plus_10dni);
echo "Aukcja kończy się: <b>".$wynik."</b><br>";

$do_konca2 = $do_konca - 86400;
if($do_konca > 86400) echo'Więc kończy się za '.date("j",$do_konca2).' dni.';
elseif ($do_konca > 3600) echo'Więc kończy się za '.floor($do_konca/(60*60)).' godzin(y).';
elseif($do_konca > 0) echo'<font color="red">Pozostała mniej niż godzina!</font>';
else echo'<font color="red">Aukcja dobiegła końca.</font>';

Może mi ktoś powiedzieć (wytłumaczyć), czemu tylko w ten sposób otrzymuję poprawne dane?
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.