Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dany tekst o danej godzine każdego dnia tygodnia
Forum PHP.pl > Forum > Gotowe rozwiązania
WyPaLaCz
Witam

Potrzebuję skryptu i prosilbym Was drodzy użytkownicy o pomoc. Skrypt ma wyglądac mniej wiecej tak:

W poniedzialek w godzinach od 0.00 do 18.00 wyswietlany byłby tekst1, następnie od 18.01 do 19.59 tekst2 itd, następnie we wtorek znowu od 0.00 do 18.00 chcialbym aby się wyswietlał, ale tym razem już zupełnie inny tekst3 a od 18.00 do 19.59 tekst4 itd. analogicznie, aż do niedzieli...

Byłbym bardzo wdzieczny za pomoc, w dostarczeniu mi takiego skryptu. Z góry dziękuje, Adrian.
?>[/php]
Bakus
[php:1:a2bc08ad85]<?
function pokaz_tekst($start, $stop, $tekst)
{
$uts = time();
if($start < $uts && $stop > $uts)
print $tekst;
}

pokaz_tekst(1075941780, 1095941820, "Tekst");

/*
Wyjaśnienie:
W przypadku, gdy chcesz by napis pojawiał się pomiędzy dniem 5 lutego 2004 i godziną 01:43:00 a dniem 23 września 2004 i godziną 14:17:00, to wykorzystujesz powyższy przykład...

Jak to działa?
A no mianowicie:
Funkcja time() zwraca czas unix'a (po opis zapraszam do googli i dokumentacji php). Na tej podstawie funkcja srawdza, czy ten moment mieści się w ramach czasowych wskazanych w parametrach funkcji.
Jak generować taki znacznik czasu?
mktime ("godziny", "minuty", "sekundy", "miesiące", "dni", "lata")
w takim układzie by znaleść w/w daty wykonałem mały skrypcik:
*/
print mktime (1, 43, 0, 2, 5, 2004) . "<BR>n";
print mktime (14, 17, 0, 23, 9, 2004) . "<BR>n";
/*
Proste?

Aaaa... dla całkowitej jasności... wykonaj sobie:
*/
date("d.m.Y H:i:s", 1095941820);
/*
i popatrz na wynik...
Drugi parametr funkcji date to opcjonalny znacznik czasu z którego będzie generowana data...
*/
?>[/php:1:a2bc08ad85]
Sorki, że wszystko w znaczniku php, ale tak wygląda czytelniej w brew pozorom...
WyPaLaCz
Dzięki, ale nie dokładnie o to mi chodziło, bo tam jest konkretne i musialbym napisac skrypt na cały rok... a mi chodzi, że teksty mają wyswietlać na stronie radia internetowego - kto teraz gra.

Ja się ucze dopiero i nie potrafię czegoś takiego sam napisać, chodzi iż w nocy leci muzyka to, zeby tekst wyświetlał się "Tylko muzyka" a od 18 w poniedziałek gra DJ1, to żeby o 18 skrypt pokazał tekst "Gra DJ1" a od 20 dj2 czyli "Gra DJ2" a we wtorek już dj3... I chcialbym napisac taki tygodniowy skrypt powtarzający się tak samo każdego tygodnia...
rzseattle
Stworz sobie tablice o stroktoze:
[php:1:e5e7700dc9]<?php
$plan[0][00] = 'Gra muzyka';
//..
$plan[6][24] = 'Gra dj Hela';
?>[/php:1:e5e7700dc9]

gdzie pierwszy element tablicy to dzien tygodnia (niedziela - 0, sobota -6 ) a drugi to godzina:
$plan[dzien_tygodnia][godzina]

no i funkcja to nic prostszego

[php:1:e5e7700dc9]<?php
function plan ( $arr ){
$curr_id = $arr[date("w")];
$curr_id = array_reverse($curr_id);
foreach($curr_id as $godzina => $plan){
if($godzina<=date("G")){
return $plan;
}
}
}

//wywolanie
print plan($plan);
?>[/php:1:e5e7700dc9]

ps Niedawno podalem podobny skrypt do wyswietlania imienin, wiec na przyszlosc uzywaj http://php.pl/search.php
DeyV
można też tak. Z wykorzystaniem OOP, i możliwością podawania minut.
Podstaowowa różnica to to, ze podaje się nie godziny, a przedziały czasowe
[php:1:79442da677]<?php

/**
*@data 2004-02-06
*@autor DeyV
*/
class ogloszenia
{
var $arrLista = array();


/**
* wyświetla pasujące wpisy
* @param booean Czy przerywać po 1 wpisie
*/
function drukuj( $booOnlyOne=FALSE )
{
$intNow = $this->prepareData( $this->getData() );
$arrWynik = array();
if( empty( $this->arrLista ) )
{
return;
}
foreach( $this->arrLista as $arrWiersz )
{
if( $arrWiersz[0] <= $intNow and $arrWiersz[1] >= $intNow )
{
$arrWynik[] = $arrWiersz[2];
if( $booOnlyOne )
{
break;
}
}
}

if( !empty( $arrWynik ) )
{
echo 'Dziś: '. implode( ', ', $arrWynik );
}
}



/**
* @param string data w formacie 1.16.35 (dzień tygodnia, godzina, minuty )
* @param string data w formacie 1.16.35 (dzień tygodnia, godzina, minuty )
*/
function addWpis( $data1, $data2, $text )
{
$this->arrLista[] = array(
$this->prepareData( $data1 ),
$this->prepareData( $data2 ),
$text
);

}

/**
* aktualna data w postaci 1.16.35 (dzień tygodnia, godzina, minuty )
* @return string
*/
function getData( )
{
return date( 'w.G.i' );
}


/**
* zwraca date w minutach od początku tygodnia, czyli poniedziałku, godzina 00:00
* @param string data w formacie 1.16.35 (dzień tygodnia, godzina, minuty )
* @return int
*/
function prepareData( $strData )
{
$arrTmp = explode( '.', $strData );
if( $arrTmp[0]==0)
{
$arrTmp[0] = 7;
}

$intData = $arrTmp[2] + 60*$arrTmp[1] + 60*24*($arrTmp[0]) ;
return $intData;
}
}


$objOgloszenia = new ogloszenia;

$objOgloszenia -> addWpis( '5.14.48', '5.15.40', 'piątek, pomiedzy 14.48 a 15.40 ' );
$objOgloszenia -> addWpis( '5.14.48', '5.15.03', 'piątek, pomiedzy 14.48 a 15.03 ' );

$objOgloszenia -> addWpis( '5.14.40', '5.14.45', 'piątek, pomiedzy 14.40 a 14.45 ' );

$objOgloszenia ->drukuj();
?>[/php:1:79442da677]
WyPaLaCz
Nie było mnie tutaj wcześniej - dzięki wielkie za pomoc, skrypcik działa OK. Pozdrawiam, punkcik za pomoc przyznany...
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-2024 Invision Power Services, Inc.