PDA

Zobacz pełną wersję : Data w mod_namedays



indego
02-11-2009, 12:59
Prosze o pomoc w zlokalizowaniu błędu w module namedays ( http://www.vytux.com/joomla/en/projects?func=startdown&id=4 ).
Moduł wyświetla niepoprawną date (dzień na przód, a dokładnie 12 godzin). W konfiguracji zaznaczony mam nasz polski czas, inne daty np w artykułach są poprawne. Domyslam się ze jest to problem w samym module.

Jola
02-11-2009, 20:28
Witam,
ten fragment kodu (mod_namedays.php l. 166) przesuwa dzień do przodu:

if (date('L', $date) == 0) { // If not leap yeat
if (date('z', $date) > 59) { // and it's past 28 of Feb (day 59) then add a day
$date = mktime(0, 0, 0, date("m", $date), date("d", $date)+1, date("Y", $date));
}
}
Rok nieprzestępny jest traktowany specjalnie.

indego
16-11-2009, 01:34
Dziękuję za odpowiedż, ale niestety nadal nie rozumiem w czym jest problem. Rok 2009 jest nieprzestepny (ostatni dzien lutego jest 59 dniem), a mimo to modul mi dodaje 1 dzien. Proszę o pomoc w rozwiazaniu tego problemu.

Jola
16-11-2009, 02:48
Napiszę tak jak ja to widzę - zmienna $date wykorzystywana w tym fragmencie kodu jest wynikiem działania funkcji wbudowanej w Joomla:
toUnix(), która pobiera datę z:
gmdate("M d Y H:i:s", time());
i dodaje przesunięcie strefowe ustawione w konfiguracji Joomla.
Z tego co wiem to funkcja gmdate() świetnie sobie radzi z latami przestępnymi (wie, że luty ma 29 dni) i nic nie trzeba samodzielnie sprawdzać i przesuwać. Tak więc, spokojnie tą część kodu można zakomentować albo wyrzucić. :)

indego
16-11-2009, 02:59
Po usunieciu kodu:

// Handle Leap Years
if (date('L', $date) == 0) { // If not leap yeat
if (date('z', $date) > 59) { // and it's past 28 of Feb (day 59) then add a day
$date = mktime(0, 0, 0, date("m", $date), date("d", $date)+1, date("Y", $date));
}
}

data wyswietla sie poprawnie, ale imieniny wyswietla z dnia poprzedniego :/

Jola
16-11-2009, 03:26
No tak zapomniałam o tablicy imienin - zaraz coś zmajstruję i wrzucę. :)
Plik: mod_namedays.php


$date_i = mktime(0, 0, 0, date("m", $date), date("d", $date), date("Y", $date));
if (date('L', $date) == 0) { // If not leap yeat
if (date('z', $date) > 59) { // and it's past 28 of Feb (day 59) then add a day
$date_i = mktime(0, 0, 0, date("m", $date), date("d", $date)+1, date("Y", $date));
}
}
// Setup the 5 days dates
$day1 = mktime(0, 0, 0, date("m", $date), date("d", $date)-2, date("Y", $date));
$day2 = mktime(0, 0, 0, date("m", $date), date("d", $date)-1, date("Y", $date));
$day3 = mktime(0, 0, 0, date("m", $date), date("d", $date) , date("Y", $date));
$day4 = mktime(0, 0, 0, date("m", $date), date("d", $date)+1, date("Y", $date));
$day5 = mktime(0, 0, 0, date("m", $date), date("d", $date)+2, date("Y", $date));
////////imieniny
$day1_i = mktime(0, 0, 0, date("m", $date_i), date("d", $date_i)-2, date("Y", $date_i));
$day2_i = mktime(0, 0, 0, date("m", $date_i), date("d", $date_i)-1, date("Y", $date_i));
$day3_i = mktime(0, 0, 0, date("m", $date_i), date("d", $date_i) , date("Y", $date_i));
$day4_i = mktime(0, 0, 0, date("m", $date_i), date("d", $date_i)+1, date("Y", $date_i));
$day5_i = mktime(0, 0, 0, date("m", $date_i), date("d", $date_i)+2, date("Y", $date_i));
plik default.php zmienić wpis:
$names[date('z',$day1)] na $names[date('z',$day1_i)]
$names[date('z',$day2)] na $names[date('z',$day2_i)]
$names[date('z',$day3)] na $names[date('z',$day3_i)]
$names[date('z',$day4)] na $names[date('z',$day4_i)]
$names[date('z',$day5)] na $names[date('z',$day5_i)]

indego
16-11-2009, 20:10
Bardzo dziękuje za pomoc i poświęcony czas @jolaass