Data w mod_namedays
Wyniki 1 do 7 z 7

Temat: Data w mod_namedays

  1. #1
    Przeglądacz indego awatar
    Dołączył
    13-04-2009
    Wpisy
    87
    Punkty
    24

    Domyślny Data w mod_namedays

    Prosze o pomoc w zlokalizowaniu błędu w module namedays ( http://www.vytux.com/joomla/en/proje...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.

  2. Pani Reklamowa
    Pani Reklamowa jest aktywna
    Avatar Panny Google

    Dołączył
    19-08-2010
    Skąd
    Internet
    Postów
    milion
    Pochwał
    setki
  3. #2
    Wyga Jola awatar
    Dołączył
    08-01-2008
    Skąd
    Wrocław
    Wpisy
    3 239
    Punkty
    386

    Domyślny

    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.

  4. #3
    Przeglądacz indego awatar
    Dołączył
    13-04-2009
    Wpisy
    87
    Punkty
    24

    Domyślny

    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.

  5. #4
    Wyga Jola awatar
    Dołączył
    08-01-2008
    Skąd
    Wrocław
    Wpisy
    3 239
    Punkty
    386

    Domyślny

    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ć.

  6. #5
    Przeglądacz indego awatar
    Dołączył
    13-04-2009
    Wpisy
    87
    Punkty
    24

    Domyślny

    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 :/

  7. #6
    Wyga Jola awatar
    Dołączył
    08-01-2008
    Skąd
    Wrocław
    Wpisy
    3 239
    Punkty
    386

    Domyślny

    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)]

  8. #7
    Przeglądacz indego awatar
    Dołączył
    13-04-2009
    Wpisy
    87
    Punkty
    24

    Domyślny

    Bardzo dziękuje za pomoc i poświęcony czas @jolaass

Reguły pisania

  • Nie możesz zakładać nowych tematów
  • Nie możesz dodawać wypowiedzi
  • Nie możesz dodawać załączników
  • Nie możesz poprawiać swoich postów
  •