1. Mam tabele ze zmianami ( w sensie zmiany w zakładzie pracy), 3 zmiany
shifts
shift_id
shift_name
shift_start
shift_stop
uzupełniona jest tak
1 | shift_1 | 06:00:00 | 14:00:00
1 | shift_2 | 14:00:00 | 22:00:00
1 | shift_3 | 22:00:00 | 06:00:00
na podstawie aktualnego czasu chce wyznaczyć, która jest obecnie zmiana.
zapytanie w stylu
SELECT * FROM shifts WHERE <aktualna godzina> BETWEEN HOUR(shift_start) AND HOUR(shift_end);
nie działa dla 3 zmiany. I w sumie musiałbym zmienić lekko te godziny aby przedziały na siebie nie nachodziły -> czyli lekko rozbudować ten helper o to by patrzył też na minuty ( zmiany musiała by się kończy np. o 13:59:00 )
załatwiam to helperem w CI
function current_shift() { //ensure that there is something in the variable - in case of no match $shift_id = ''; $ci =& get_instance(); $ci->db->select('shift_id'); $ci->db->where($current_hour . ' BETWEEN shift_start AND shift_end', NULL, FALSE); $query = $ci->db->get('shifts'); $result = $query->row(0); $shift_id = $result->shift_id; return $shift_id; }
2. Różnica między czasami
załóżmy, że jest 1 zmiana ( czyli między 8 a 14), załóżmy dalej stan aplikacji na 10:30. Potrzebuję wyliczyć ile upłynęło czasu między 10:30 a 8 w sekundach. Ten przypadek jeszcze nie taki zły ale czy w ten sam sposób da się wliczyć czas między np. 23 a 2.30 w nocy? Tutaj też się zmienia data i nie wiem czy to ma znaczenie dla tej kalkulacji?
---
jak widać oba punkty są poniekąd zależne od siebie bo oba bazują na tabeli 'shifts'