Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: mktime, date, array!!?

Sivun loppuun

geggo [26.05.2005 10:38:01]

#

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!!!

Blaze [26.05.2005 11:11:19]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=oracle

geggo [26.05.2005 11:33:13]

#

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"

Olga [26.05.2005 12:42:48]

#

Miten olis seuraava:

$tieto_array[$i]['alku']  = $results_out['ALKU'];
$tieto_array[$i]['loppu'] = $results_out['LOPPU'];

geggo [26.05.2005 13:29:48]

#

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!

Olga [26.05.2005 14:48:27]

#

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
?>

exAtuu [26.05.2005 16:00:25]

#

tuon mktimestä saadun ajan voi myös heittää date():lle muotoiltavaksi:

$muotoiltu = date("d.m.Y H:i", $aloitus);

EDIT: osaan muotoilla

ajv [26.05.2005 16:21:56]

#

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

Mazuli [26.05.2005 18:57:43]

#

eikö olisi helpompi vain tallentaa ne ajat tuollaisen UNIX-aikaleimana->helpompi vertailla jne. date functiolla sen saa sitten haluttuun muotoon

geggo [27.05.2005 11:12:49]

#

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!

ajv [27.05.2005 11:28:18]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta