• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie bliższego czwartku lub niedzieli

Aruba Cloud - Virtual Private Server VPS
0 głosów
184 wizyt
pytanie zadane 5 czerwca 2015 w PHP przez sliwka92 Nowicjusz (240 p.)
edycja 5 czerwca 2015 przez sliwka92

Witam, mam problem z kodem ktory bedzie wyświetlał ostatni czwartek lub niedziele w zależności od aktualnej daty i potem reszte dni, jeżeli czwartek lub niedziela jest dniem aktualnym to wyświetly date tego dnia i ostatni czwartek lub niedziele i przedostatni czwartek lub niedziele mój kod wyglada tak:
 

$fday = 'Thursday';//czwartek
$sday = 'Sunday';//niedziela
// wyświetlenie czwartku lub niedzieli albo ostatniego czwartku lub niedzieli w zależności który bliżej
$day = date('D');
if($day == 'Thu' OR $day == 'Sun'){
$today = date('d-m');
// wyświetlenie ostatniego czwartku lub niedzieli
    if( (date('d')+date('d',strtotime("last $sday"))) > (date('d')+date('d',strtotime("last $fday")))) {
         $lastday = date('d-m',strtotime("last $sday"));
         $lastday2 = date('d-m',strtotime("last $fday"));
    } else {
         $lastday = date('d-m',strtotime("last $fday"));
         $lastday2 = date('d-m',strtotime("last $sday"));
    }
}elseif ( (date('d')+date('d',strtotime("last $sday"))) > (date('d')+date('d',strtotime("last $fday")))) {
     $lastday = date('d-m',strtotime("last $sday"));

     $lastday2 = date('d-m',strtotime("last $fday"));
     $lastday3 =date('d-m',strtotime("last $sday - 1 week"));

} else {
     $lastday = date('d-m',strtotime("last $fday"));
     $lastday2 = date('d-m',strtotime("last $sday"));
     $lastday3 =date('d-m',strtotime("last $fday - 1 week"));
}

if (isset($today)){
    $firstDay = $today;
    $secondDay = $lastday;
$thridDay = $lastday2;
} else {
    $firstDay = $lastday;
    $secondDay = $lastday2;
$thridDay = $lastday3;
}


Chodzi o to że, chce stworzyć kod który wyświetla mi ostatni czwartek lub niedziele w zależności który jest bliżej aktualnej daty. Załóżmy że jest data 06-05 to chciałbym uzyskać datę 06-04, 31-05, 28-05. Czyli ostatni czwartek 06-04 następnie niedziela 31-05 i znowu czwartek 28-05. Jeżeli aktualna data to niedziele lub czwartek załóżmy 28-05. To chce uzyskać 28-05, 24-05 i 21-05.


ogólnie kod działa robi się problem w momencie gdy w miesiący pierwszy napotkany jest czwartek i az do niedzieli pierwszej wyświetla zle mógłbym dodać kolejnego ifa ktory sprawdza czy pierwszy czwartek = ostatniemu czwartku && różnica miedzy czwartkiem a niedzielą wynosi 20 ale może jest na to lepszy sposób?

4 odpowiedzi

+2 głosów
odpowiedź 5 czerwca 2015 przez Comandeer Guru (606,480 p.)
wybrane 5 czerwca 2015 przez sliwka92
 
Najlepsza

Albo ja już źle widzę, albo dwa pierwsze warunki są takie same? A nie… Bo to są inne poziomy zagłębień…

Poza tym - pierwsza zasada programowania: bądź suchy! (DRY - don't repeat yourself), a Ty wszędzie powtarzasz te same obliczenia przez cały kod. Dodając to do super dziwnego zapisu klamer dostajemy wręcz ujemną czytelność. Samo ustalenie gdzie się dane ify kończą graniczy z cudem.

Twój kod vs

<?php
$fday = 'Thursday';//czwartek
$sday = 'Sunday';//niedziela
// wyświetlenie czwartku lub niedzieli albo ostatniego czwartku lub niedzieli w zależności który bliżej
$day = date('D');

$lastSday = (date('d')+date('d',strtotime("last $sday")));
$lastFday = (date('d')+date('d',strtotime("last $fday")));

if($day == 'Thu' OR $day == 'Sun')
{
	$today = date('d-m');

	// wyświetlenie ostatniego czwartku lub niedzieli
	if($lastSday > $lastFday)
	{
		$lastday = date('d-m',strtotime("last $sday"));
		 $lastday2 = date('d-m',strtotime("last $fday"));
	} 
	else
	{
		$lastday = date('d-m',strtotime("last $fday"));
		$lastday2 = date('d-m',strtotime("last $sday"));
	}
}
elseif($lastSday > $lastFday)
{
	$lastday = date('d-m',strtotime("last $sday"));
	$lastday2 = date('d-m',strtotime("last $fday"));
	$lastday3 = date('d-m',strtotime("last $sday - 1 week"));
 
}
else 
{
	$lastday = date('d-m',strtotime("last $fday"));
	$lastday2 = date('d-m',strtotime("last $sday"));
	$lastday3 = date('d-m',strtotime("last $fday - 1 week"));
}
 
if(isset($today))
{
	$firstDay = $today;
	$secondDay = $lastday;
	$thridDay = $lastday2;
}
else
{
	$firstDay = $lastday;
	$secondDay = $lastday2;
	$thridDay = $lastday3;
}

Prawda, że przyjemniej? Od razu się lepiej pracuje i szybciej można namierzyć błąd. A wystarczyło kilka wcięć w kodzie. Teraz nawet jak dostawisz jeszcze jednego ifa to będzie wiadomo który jest od czego ;)

0 głosów
odpowiedź 5 czerwca 2015 przez draghan VIP (106,230 p.)
Wybacz, ale z Twojej wypowiedzi niewiele da się zrozumieć... :( Mógłbyś używać nieco więcej przecinków, a jakbyś pogrupował swoje myśli w osobne zdania, to już w ogóle byłoby super. ;)

Co oznacza "ostatni bliższy czwartek lub niedzielę"?
komentarz 5 czerwca 2015 przez CzlowiekSkrypt Nałogowiec (26,340 p.)
Ta część zdania też sprawiła mętlik w mej głowie :D
0 głosów
odpowiedź 5 czerwca 2015 przez sliwka92 Nowicjusz (240 p.)
Chodzi o to że, chce stworzyć kod który wyświetla mi ostatni czwartek lub niedziele w zależności który jest bliżej aktualnej daty. Załóżmy że jest data 06-05 to chciałbym uzyskać datę 06-04, 31-05, 28-05. Czyli ostatni czwartek 06-04 następnie niedziela 31-05 i znowu czwartek 28-05. Jeżeli aktualna data to niedziele lub czwartek załóżmy 28-05. To chce uzyskać 28-05, 24-05 i 21-05.
komentarz 5 czerwca 2015 przez Alienator Początkujący (280 p.)

Po pierwsze dobrze by było też abyś uzywał w oznaczeniach dat nomenklatury Polskiej. Dlczego? Ponieważ najpierw powinien być dzień a potem miesiąc. Zatem kiedy piszesz : ''Załóżmy że jest data 06-05 to chciałbym uzyskać datę 06-04, 31-05, 28-05.'' 

To wiekszosc czyta to tak : Załóżmy że jest szósty maja, to chciałbym uzyskać datę szósty kwietnia, 31 maja, 28 maja. Po czym coś tu nie pasuje, zatem ludzie konwertują na odwrót i wychodzi : Załóżmy że jest piąty czerwca to chciałbym uzyskać datę czwarty czerwca, 31 maja, 28 maja. I dopiero teraz nagle ma to sens.

Z góry wiadomo że to błąd i każdy siedzi i sie zastanawia o co kaman. Ten kod, co więcej ten program jest bez sensu...

Ale to tylko tak co by było jaśniej :)

Co do samego kodu to ja osobiście nie widzę innego rozwiązania niż dodanie kolejnego ifa. Owszem sporo tych ifów a z samego kodu robi sie oczopląs. Może rozważ napisanie go na nowo dając więcej ifów a mniej elsów?

0 głosów
odpowiedź 5 czerwca 2015 przez Alienator Początkujący (280 p.)

Po pierwsze dobrze by było też abyś uzywał w oznaczeniach dat nomenklatury Polskiej. Dlczego? Ponieważ najpierw powinien być dzień a potem miesiąc. Zatem kiedy piszesz : ''Załóżmy że jest data 06-05 to chciałbym uzyskać datę 06-04, 31-05, 28-05.'' 

To wiekszosc czyta to tak : Załóżmy że jest szósty maja, to chciałbym uzyskać datę szósty kwietnia, 31 maja, 28 maja. Po czym coś tu nie pasuje, zatem ludzie konwertują na odwrót i wychodzi : Załóżmy że jest piąty czerwca to chciałbym uzyskać datę czwarty czerwca, 31 maja, 28 maja. I dopiero teraz nagle ma to sens.

Z góry wiadomo że to błąd i każdy siedzi i sie zastanawia o co kaman. Ten kod, co więcej ten program jest bez sensu...

Ale to tylko tak co by było jaśniej :)

Co do samego kodu to ja osobiście nie widzę innego rozwiązania niż dodanie kolejnego ifa. Owszem sporo tych ifów a z samego kodu robi sie oczopląs. Może rozważ napisanie go na nowo dając więcej ifów a mniej elsów?

Podobne pytania

0 głosów
1 odpowiedź 538 wizyt
0 głosów
3 odpowiedzi 2,355 wizyt
0 głosów
0 odpowiedzi 512 wizyt
pytanie zadane 8 lutego 2019 w JavaScript przez niezalogowany

93,286 zapytań

142,286 odpowiedzi

322,313 komentarzy

62,606 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...