Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Aika suomenkielellä

Clawhammer [27.10.2005 15:03:40]

#

Eli mulla on tollainen funktio joka tulostaa tietokannasta viimeksi kirjatuneen ajan tyyliin: Thu Oct 27 13:47 EEST 2005

Tuossa onpi funktio mitä käytän ja aika on kannassa muodossa DATETIME. Kysymys kuuluupi miten nuo kuukauden ja viikonpäivät saa muutettua suomen kielelle?

<?PHP

function niceDateTime($datetime)
{
    if (is_numeric($datetime)) {
    	$year = substr($datetime,0,4);
        $month = substr($datetime,4,2);
        $day = substr($datetime,6,2);
        $hr = substr($datetime,8,2);
        $min = substr($datetime,10,2);
    } else {
        $year = substr($datetime,0,4);
        $month = substr($datetime,5,2);
        $day = substr($datetime,8,2);
        $hr = substr($datetime,11,2);
        $min = substr($datetime,14,2);
    }
    return date("D M j G:i T Y",mktime($hr,$min,0,$month,$day,$year));
}

?>

tsuriga [27.10.2005 15:29:12]

#

suomen kieli ;). Katso https://www.php.net/manual/en/function.date.php ja tuolta etsit vastaavat parit string - int. Eli kun D on päivän kolmekirjaiminen lyhenne eli merkkijono, niin etsit sieltä, mikä parametri kertoo päivän lukuna (D:tä vastaa N) (myöhemmin viittaan tähän 'vastinparametrilla'). Sitten määrittelet jossain taulukon, jossa pidät noita suomenkielisiä (nyt adjektiivina yhteen) vastineita, ja haet sieltä taulukosta noilla daten vastinparametreilla oikeat arvot. Eli

<?php
// suomenkieliset viikonpäivät
$paivat = $array('Ma','Ti','Ke',..);

// ja sitten funktiossa
  return $paivat[date("N",mktime(..))+1].$muuttiedot;
?>

Tuossa kyllä joutuu toistamaan tuota mktimea niin usein, että kannattanee ottaa se ensin muuttujaan ja sijoittaa sitä daten kakkosparametriksi.

Blaze [27.10.2005 16:03:59]

#

https://www.php.net/manual/en/function.date.php:

To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().

tsuriga [27.10.2005 20:42:49]

#

Niinpä onkin, tuo setlocalen parametri string locale on sitten "fin_FIN" ja strftime palauttaa kaiken pienellä. Ensimmäistä mainitsemaani tapaa voi käyttää jos käyttöjärjestelmä ei tue setlocalea.

Clawhammer [28.10.2005 16:42:52]

#

Tuo setlocale() ei toiminut. Sain kyllä tuon toimimaan jotenkuten käyttämällä taulukoita. Jokin silti mättää, koska viikonpäiväksi tulostuu lauantai vaikka nyt on perjantai,mistä voisi kiikastaa

<?

$paivat = array("Sunnuntai",
		"Maanantai",
		"Tiistai",
		"Keskiviikko",
		"Torstai",
		"Perjantai",
		"Lauantai");

print $paivat[date("w",mktime($day))];

?>

tsuriga [28.10.2005 17:21:48]

#

<?php

// tällä tulostuu minulla "perjantai joulukuu 1978"
setlocale(LC_ALL, "fin_FIN");
echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978));

// tällä taas "Perjantai"
print $paivat[date("w",time())];

?>

Olisiko systeemisi aika päivän edellä tai tuo $day muodostettu väärin? Koska tuo taulukosta hakeminen on oikein.

Vastaus

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

Tietoa sivustosta