Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeliczanie godzin w rozkładzie jazdy
Forum PHP.pl > Forum > PHP
EliaS
Witam po raz n-ty w programie "pytanie do experta"
W dzisiejszym odcinku spróbujemy znaleźć rozwiązanie na następujący problem:
Mam tabele a w niej jedna z kolumn o nazwie "godzina_odjazdu" owe godziny przypożądkowane są do poszczegolnych przystankow na trasie przejazdu. I teraz powstaje pytanie czy wyciagajac dane godziny na strone mozna w php zrobic pętlę ktora dana trase przeliczala by zmieniajac godziny odjazdu o 22 godziny.Chodzi o to ze dany kurs wyjezdza w trase co 22 godziny, tzn. jezeli dzis wyrusza o godz. 18.00 z pierwszego przystanku, na drugim jest powiedzmy o 19.00 to nastepny kurs zostanie automatycznie przeliczony i odbedzie sie za 22godz. czyli o godz. 16.00 z pierwszego przystanku oraz 17.00 -drugi przystanek itd.
Potrzebuje zrobic cos takiego zeby skrypt automatycznie przeliczal mi rozklad jazdy na np. kolejny miesiac.
cboot
Odpowiedź wydaje się banalna. Jeśli ma tylko wyświetlić nowe godziny dla następnego kursu, to jest to dodawanie modulo 24:
[php:1:6159ae4dc2]<?php
$nowa_godzina = ( $godzina + 22 ) % 24
?>[/php:1:6159ae4dc2]
Takie działanie dla godziny 17 zwróci 15. Czyli jak teraz autobus jest na przystanku o godzinie 17, to następna godzina o jakiej będzie to 15. Takie coś oblicza to działanie, ale nie wiem, czy nie chodzi Ci o coś więcej.
EliaS
No to juz połowa sukcesu, teraz tylko potrzebuje zeby obliczalo mi to w petli na caly powiedzmy miesiac oraz wykluczajac godziny od 0.00 do 5.00 am czyli jeżeli godzina odjazdu dojdzie powiedzmy do godziny 4.00am to zeby przenosilo kurs dopiero na 0.00
cboot
Jeżeli rzeczywiście ma przenosić z 4am aż na 0am - czyli 24 (dziwię się bo to odstęp pomiędzy kursami 44 godzin w takim przypadku), to działanie wygląda tak:
[php:1:163900ef8a]<?php
$nowa_godzina = $godzina > 5 ? ( $godzina + 22 ) % 24 : 24;
?>[/php:1:163900ef8a]
(postawia 24, a nie 0, żeby później można było łatwo odejmować - po 24, będzie później 22, itd.)

Jeśli odstęp czasowy ma być stale 22 godziny, to jak łatwo w tym wypadku zauważyć, godziny będą zmieniać się od 24, 22, 20... 10, 8, 6 i potem znowu: 24, 22, ... itd. Tak więc co 10 dni godziny będą się powtarzać. Można więc to podstawiać w pętli bez obliczania. Pętli coś na kształt takiej:
[php:1:163900ef8a]<?php
for ( $i = 24; $i > 5; $i--)
{
// to podstawienia kolejnych 10 dni
}
?>[/php:1:163900ef8a]
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.