Avatar billede morpheus Nybegynder
01. april 2005 - 02:01 Der er 16 kommentarer og
1 løsning

Generer tidsskema

Hej eksperter,

Jeg har hele aftenen siddet og funderet over hvordan det følgende kan lade sig gøre - og nu er timerne blevet små...

Følgende skema skal frembringes med "klikbare" tider gerne med link som skema.php?tid=unix timestamp

8:00        20 min.
pause 10 min.
8:30        20 min.
pause 10 min.
9:00        20 min.
pause 10 min.
9:30        20 min.
...

Pausen og de 20 min. må gerne variabler der kan justeres om nødvendigt.

På forhånd tak,

M
Avatar billede alister_crowley Nybegynder
01. april 2005 - 02:13 #1
altså

if(date("H",time()) == 08)
{
echo "<a href=\"skema.php?tid=".time()."\">8:00</a><br />\n";
}

Men hvad mener du med pauserne ?

www.php.net/date
www.php.net/time
Avatar billede morpheus Nybegynder
01. april 2005 - 02:19 #2
Fra kl. 8:00 skal der være en 20 min. session af en slags, herefter skal der være en pause i skemaet på 10 min. - så igen en 20 min. session og 10 min. pause...

Pauserne behøver ikke at være markeret
Avatar billede alister_crowley Nybegynder
01. april 2005 - 02:23 #3
prøv at komme for formålet, jeg kan ikke helt se hvordan du vil strukturere det.

Kode mæssigt er de enkelte dele bare at bruge time() og date() og evt. $_SESSION
Men strukturmæssigt er det lidt underligt, det du har gang i.
Avatar billede morpheus Nybegynder
01. april 2005 - 02:30 #4
Okay...

Man skal kunne booke en tid.
tiderne ligge fx. i tidsrummet:
8:00 - 8:20
(pause 10 min)
8:30 - 8:50
(pause 10 min)
9:00 - 9:20
(pause 10 min)

Altså en bookning == 20 min.
Avatar billede bromer Nybegynder
01. april 2005 - 02:51 #5
Er det sådan noget du vil have?

$start = strtotime('2005-04-01 08:00:00');
$end = strtotime('2005-04-01 16:00:00');
do {
  // Session time
  $ses_start = date("H:i",$start);
  $start += 1200;
  $ses_end = date("H:i",$start);
  $start += 600;
  printf("%s - %s\n",$ses_start,$ses_end);
} while($start < $end);

Den printer ikke selve pause ud.
Avatar billede morpheus Nybegynder
01. april 2005 - 02:56 #6
Præcis Bromer!!! :)

Nu vil jeg så være lidt besværlig... kan du sætte det op i en table, så det ser sådan her ud:

<table border="0" cellpadding="0" cellspacing="0" id="cal" width="50%">
    <tr>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Tidspunkt</strong></td>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Status</strong></td>
    </tr>
    <tr>
        <td width="25%">08:00</td>
        <td>Ledig</td>
    </tr>
</table>
Avatar billede bromer Nybegynder
01. april 2005 - 03:00 #7
Sådan her

$pause = 600; // Pause på 10 min
$session = 1200; // Session på 20 min

$start = strtotime('2005-04-01 08:00:00');
$end = strtotime('2005-04-01 16:00:00');
?>
<table border="0" cellpadding="0" cellspacing="0" id="cal" width="50%">
    <tr>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Tidspunkt</strong></td>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Status</strong></td>
    </tr>
<?
while($start < $end) {
        // Session time
        $ses_start = date("H:i",$start);
        $start += $session;
        $ses_end = date("H:i",$start);
        $start += $pause;
        ?>
    <tr>
        <td width="25%"><?=$ses_start;?> - <?=$ses_end;?></td>
        <td>Ledig</td>
    </tr>
        <?
}

?>
</table>
Avatar billede morpheus Nybegynder
04. april 2005 - 02:12 #8
Nu virker det her så...
Booking tiderne gemmes i en database (starttime og endtime) (unix tid).

Hvis jeg nu ikke ønsker de tider listet, der er taget den dag, hvor smider jeg så et check for det?
Avatar billede bromer Nybegynder
04. april 2005 - 02:12 #9
Hvordan ser din tabel ud? Og er det kun hele slots a 20 min der kan bookes?
Avatar billede morpheus Nybegynder
04. april 2005 - 02:15 #10
aid (auto)
uid (brugerens id)
starttime (text) (unix tids format)
endtime (text) (unix tids format)
meetup (int) (0 = tiden er ikke overskredet, 1 = Ikke mødt, 2 = mødt)

Der eksisterer kun "blokke" af 20 min.
Avatar billede bromer Nybegynder
04. april 2005 - 02:20 #11
$pause = 600; // Pause på 10 min
$session = 1200; // Session på 20 min

$start = strtotime('2005-04-01 08:00:00');
$end = strtotime('2005-04-01 16:00:00');
?>
<table border="0" cellpadding="0" cellspacing="0" id="cal" width="50%">
    <tr>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Tidspunkt</strong></td>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Status</strong></td>
    </tr>
<?
while($start < $end) {
        // Session time
        if (mysql_result(mysql_result("select count(1) FROM <bookingtabel> WHERE starttime = " . $start),0) > 0) {
        $ses_start = date("H:i",$start);
        $start += $session;
        $ses_end = date("H:i",$start);
        $start += $pause;
        ?>
    <tr>
        <td width="25%"><?=$ses_start;?> - <?=$ses_end;?></td>
        <td>Ledig</td>
    </tr>
        <?
}
}

?>
</table>

Men denne løsning kræver at du rammer på sekundet og at man kun booker 20 min af gangen.
Avatar billede bromer Nybegynder
04. april 2005 - 02:48 #12
$pause = 600; // Pause på 10 min
$session = 1200; // Session på 20 min
$start = strtotime('2005-04-01 08:00:00');
$end = strtotime('2005-04-01 16:00:00');
?>
<table border="0" cellpadding="0" cellspacing="0" id="cal" width="50%">
    <tr>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Tidspunkt</strong></td>
        <td style="border-bottom: 2px dashed #CCCCCC;"><strong>Status</strong></td>
    </tr>
<?
while($start < $end) {
        $tmp = $start;
        $ses_start = date("H:i",$start);
        $start += $session;
        $ses_end = date("H:i",$start);
        $start += $pause;

// Session time
        if (mysql_result(mysql_result("select count(1) FROM <bookingtabel> WHERE starttime = " . $start),0) > 0) {
        ?>
    <tr>
        <td width="25%"><?=$ses_start;?> - <?=$ses_end;?></td>
        <td>Ledig</td>
    </tr>
        <?
}
}

?>
</table>
Avatar billede bromer Nybegynder
04. april 2005 - 03:02 #13
hov..       

if (mysql_result(mysql_result("select count(1) FROM <bookingtabel> WHERE starttime = " . $start),0) > 0) {

skal være

if (mysql_result(mysql_query("select count(1) FROM <bookingtabel> WHERE starttime = " . $start),0) > 0) {
Avatar billede bromer Nybegynder
04. april 2005 - 03:09 #14
og det skal så være lige omvendt (jeg er ved at blive lidt træt)


if (mysql_result(mysql_query("select count(1) FROM <bookingtabel> WHERE starttime = " . $start),0) == 0) {
Avatar billede bromer Nybegynder
04. april 2005 - 03:24 #15
og igen en fejl

if (mysql_result(mysql_query("select count(1) FROM <bookingtabel> WHERE starttime = " . $tmp),0) == 0) {
Avatar billede morpheus Nybegynder
04. april 2005 - 03:33 #16
Løsningen blev altså:

<?
    dbConn();
    while($start < $end) {
        $tmp = $start;
        $ses_start = date("H:i",$start);
        $start += $session;
        $ses_end = date("H:i",$start);
        $start += $pause;
       
        list($starthour,$startmin) = split(":",$ses_start);
        $unixstart = mktime($starthour,$startmin,0,$month,$date,$year);
        list($endhour,$endmin) = split(":",$ses_end);
        $unixend = mktime($endhour,$endmin,0,$month,$date,$year);

        // Session time
        if (mysql_result(mysql_query("SELECT COUNT(1) FROM <booking table> WHERE starttime = " . $tmp),0) == 0) {
            ?>
            <tr>
                <td width="25%"><a href="user.book.php?start=<?=$unixstart?>&end=<?=$unixend?>"><?=$ses_start;?> - <?=$ses_end;?></a></td>
                <td>Ledig</td>
            </tr>
            <?
        } else {
            ?>
            <tr>
                <td width="25%"><?=$ses_start;?> - <?=$ses_end;?></td>
                <td><font color="#FF0000">Optaget</font></td>
            </tr>
            <?php
        }
    }
    ?>
Avatar billede bromer Nybegynder
04. april 2005 - 04:52 #17
yep.. og her er et svar :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester