Kertoisiko joku viisaampi, millä tavalla saisin järkevimmin tehtyä seuraavaa: oracle kannassa on taulukko jossa on tapahtuma, alku_aika ja loppu_aika. Nyt pitäisi jollakin tavalla saada nuo alku_aika ja loppu_aika haettua johonkin muuttujaan tai taulukkoon(array).
Tavoitteen olisi että viikkokalenteri katsoisi onko kannassa päivälle ja kellon_ajalle tapahtumia, jos olisi niin tulostaisi ne viikkokalenteriin!
Viikkokalenterissa päivät ja kellon aika on mktimella.
Jos olisi helppoa ja yksinkertaista ratkaisua niin kiitos!!!
Niin kyllä tuo haku onnistuu sinänsä hyvin. mutta ongelma on se että miten hakutulokset saan tuohon array:n?
Nyt se on tyyliin:
$i = 0; while (OCIFetchInto($results, &$results_out, OCI_ASSOC)){ $tieto_array[$i] = $results_out['ALKU'] .$results_out['LOPPU']; $i++; } print_r ($tieto_array); OCIFreeStatement($results); OCILogoff($conn);
Mutta tämä laittaa ALKU ja LOPPU tiedon samaan, kun ne pitäisi saade erikseen, jotta voisi sitten viikkokalenterissa verrata tyyliin:
"onko tälläpäivällä ja tällä kellon ajalla tapahtumia, jos ei, niin tulostetaan tyhjä solu, jos on niin tulostetaan tapahtuma"
Miten olis seuraava:
$tieto_array[$i]['alku'] = $results_out['ALKU']; $tieto_array[$i]['loppu'] = $results_out['LOPPU'];
tämä hyvä! kiitti! Vielä yksi apu olisi tarpeen!
Kun kannasta haen alku_aika ja loppu_aika. Ne tulee muodossa 'DDMMYYYYhh24mi'(alku ->260520050915, loppu 260520051545) tuohon tieto_array:n. Miten saan ne muuttumaan mktime:ksi? Nyt minulla ->
$aloitus=mktime('$alku'); tulos 1117057477
$lopetus=mktime('$loppu'); tulos 1117057477
Eihän se noin voi olla koska kellon ajat ovat eri!
Kokeilin myös:
$aloitus=mktime(0,0,0,'$alku'); tulos 1117057477
$lopetus=mktime(0,0,0,'$loppu'); tulos 1117057477
Tää on niin turhauttavaa päivämäärien ja ajan kanssa touhuilu!
Kätevästi säännöllisillä lausekkeilla tai vaikkapa PHP:n omilla merkkijonofunktioilla. Oraakkelissahan saattaa olla jopa valmiit funktiot moista varten.
<?php $puf = ploh("260520050915"); // oraakkelista saatu aika $aloitus = mktime($puf['hours'], $puf['mins'], 0, $puf['month'], $puf['day'], $puf['year']); function ploh($aika) { $timeArray = array(); $timeArray['day'] = substr($aika, 0, 2); $timeArray['month'] = substr($aika, 2, 2); $timeArray['year'] = substr($aika, 4, 4); $timeArray['hours'] = substr($aika, 8, 2); $timeArray['mins'] = substr($aika, 10, 2); return $timeArray; } // funktio ?>
tuon mktimestä saadun ajan voi myös heittää date():lle muotoiltavaksi:
$muotoiltu = date("d.m.Y H:i", $aloitus);
EDIT: osaan muotoilla
Kannattaa kokeilla myös josko strtotime() osaisi tehdä tuon muunnoksen UNIX-aikaleimaksi. Kannattanee myös vilkaista sitä Oraclen manuskaa - veikkaan, että sieltä löytyy se paras ratkaisu :)
eikö olisi helpompi vain tallentaa ne ajat tuollaisen UNIX-aikaleimana->helpompi vertailla jne. date functiolla sen saa sitten haluttuun muotoon
no tässä siis koko paketti. On kalenteri muotoa ->
aika ma 23.6 ti 24.6 ke25.6 ...pe 27.6 800-830 830-900 900-930 ... ...
Ja tuo kalenteri on rakennettu (lainannut pohjan netistä) :
for($f=0;$f<5;$f++) { $contents .= " <td class=\"daycell\"> ".$week_days[$f]." ".date("d.m.Y",$last_monday+($f*60*60*24))." </td>\n"; $set[$g] = 0; } $contents .= " </tr>\n"; for($i=$start; $i<$stop; $i=$i+50) { $contents .= " <tr>\n"; $first_num = substr($i, 0, -2); if(substr($i, -2) == 50) $last_num = '30'; else $last_num = '00'; if($last_num == 30) { $sec_last_num = '00'; $sec_first_num = $first_num+1; } else { $sec_last_num = '30'; $sec_first_num = $first_num; } $contents .= " <td class=\"timecell\">".$first_num.":".$last_num."-".$sec_first_num.":".$sec_last_num."</td>\n"; for($g=0; $g<5; $g++) { $seek_time = $g*24*60*60+$last_monday+($first_num*60*60+$last_num*60);
Kannassa on tietoa tapahtuma, alku_aika ja loppu_aika. Tapahtumat ovat muotoa: tapahtuma = keilailu, alku_aika= 25.5.2005 12:30, loppu_aika = 25.5.2005 14:30
Nyt siis pitäisi saada kannassa olevat tapahtumat näkymään tuossa kalenterissa. Mutta kun ei tämä ole itellä niin kovin hanskassa ni apu otetaan vastaan!
Mazuli kirjoitti:
eikö olisi helpompi vain tallentaa ne ajat tuollaisen UNIX-aikaleimana->helpompi vertailla jne. date functiolla sen saa sitten haluttuun muotoon
No jaah, uskoisin vertailun olevan helpompaa, kun aika on siellä kannassa tietokannan ymmärtämässä formaatissa, jolloin voi käyttää tietokannan omia työkaluja ajan kanssa kikkailemiseen. Ei ole Oraclesta kokemusta, mutta uskoisin tuon hintaluokan tietokannasta löytyvän myös työkalut ajan muotoilemiseen.
Mitä itse ongelmaan tulee, niin mielestäni tuossa ei UNIX-aikaleimaa edes tarvita. Eikös riitä vertailu, että päivämäärä,kuukausi ja vuosi ovat sama? Itse koodasin juuri eilen kalenterin ja käytin pohjana Pitfall:n kalenteripohjaa, josta on mielestäni erittäin helppo lähteä rakentamaan omaa kalenteria.
Aihe on jo aika vanha, joten et voi enää vastata siihen.