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)); } ?>
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.
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().
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.
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
<?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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.