hei,
pakko kysellä apuja seuraavaan ongelmaan:
minulla on lomake, jossa olevalla syöttökentällä käyttäjä voi tallettaa haluamansa päivämäärän tietokantaan. päivämäärä ei siis ole curdate(). miten saan php:n puolella pakotettua syötettävän päivämäärän johonkin formaattiin (esim. pp/kk/vvvv tai paremminkin vvvv/kk/pp).
ongelmani on siinä, että käyttäjähän voi syöttää päivämäärän lomakkeen kenttään periaatteessa ihan minkälaiseen muotoon tahansa. myöhemmin käytän syötettyä päivämäärää taulussa indeksinä, joten se pitäisi saada siihen käyttöön sopivaan muotoon.
Tällä koodilla saa UNIX-timestampin päivämäärästä:
<?php $day = 15; $month = 5; $year = 2015; $day = max(1, min(31, $day)); $month = max(1, min(12, $month)); $time = strtotime("$year-$month-$day"); echo date("d.m.Y H:i", $time);
En tiedä sitten onko juuri se mitä haet :P
Jos lomakkeeseen on tarkoitus syöttää päivämäärä yksittäiseen kenttään, homma muuttuukin vähän hankalammaksi. Helpompaa olisi antaa käyttäjän valita päivämäärä alasvetovalikosta jolloin ei tarvitse miettiä turhaan päivämäärän parsimista.
tarkoitan sitä että käyttäjä voi antaa päivämäärän esim:
-15/4/2010 tai
-15/04/2010 tai
-15.4.2010 tai
-15.04.2010 tai
sitten kaikki päinvastaisessa järjestyksessä.
miten saan tästä mössöstä tietokantakelpoisen päiväyksen?
volume kirjoitti:
ongelmani on siinä, että käyttäjähän voi syöttää päivämäärän lomakkeen kenttään periaatteessa ihan minkälaiseen muotoon tahansa.
No, tuo on kieltämättä sen luokan ongelma, ettei siihen ole olemassa ratkaisua.
Jos käyttäjä syöttää 9/10/2010, niin et voi tietää onko se 9. lokakuuta vai 10. syyskuuta. Vielä hienompi esimerkki olisi 9/10/11.. Eli 9.10.2011, 10.9.2011, 9.11.2010, 11.9.2010, 10.11.2009 vai 11.10.2009. Eli "minkälaiseen muotoon tahansa" syötetty päivämäärä ei ole missään tapauksessa järkevä lähtökohta.
Ehdotan, että ohjeistat käyttäjälle, missä muodossa päivämäärä tulee syöttää. Jos järjestelmän kohdeyleisö on suomalaiset, niin sitten suosittelen, että pyydät ne muodossa p.k.vvvv.
Jos käyttäjät on oikeasti niin pöljiä että syöttelee mitä sattuu ohjeistukesta huolimatta, niin ainahan voit tehdä kolme alasvetolistaa. Tosin tämä on mielestäni todella huono vaihtoehto, koska tyhmimmän prosentin väestöstä takia 99% väestöstä joutuu kärsimään. Tosin niinhän se usein menee.
no, suomalaisessa ympäristössähän me toimitaan :-)
eikö sellaista merkkijonofunkkaria ole joka toimisi seuravalla tavalla:
1)luetaan merkkijonon alusta asti niin pitkälle kuin tulee vastaan ensimmäinen merkki, joka ei ole numero = päivät.
2) jatketaan edelleen lukemista niin pitkälle kun tulee vastaan merkki, joka ei ole numero= kuukaudet
3) loput on sitten vuotta.
sitten yhdistetään 1.2.3 tai 3.2.1
miten ton saisi koodiksi?
Opettele säännölliset lausekkeet.
$aika = "abc0012abc.abc007abc.abc002011abc"; $aika = preg_replace("#.*?([1-9]\\d*).+?([1-9]\\d*).+?([1-9]\\d*).*#", "\\1.\\2.\\3", $aika, -1, $osumia); if (!$osumia) { die("Virheellinen päivämäärä!"); } echo $aika, "\n"; // 12.7.2011
Lausekkeen hienosäätö jääköön kotitehtäväksi.
Mielestäni abc0012abc.abc007abc.abc002011abc tapauksessa olisi loogisempaa tulostaa "Virheellinen päivämäärä", kuin kaivaa tuosta 12.7.2011.
Jos joku nyt kirjoittaisi vaikka että:
Lempikanavani on MTV3. Joskus katson myös YLE2:ta. Tämä on tilanne vuonna 2010.
Olisiko mitään järkeä että tuosta tulisi "validi" päivämäärä joka olisi 3.2.2010?
Itse kelpuuttaisin erotinmerkeiksi . - ja /. Mahdolliset tyhjät (välilyönti, tabulaattori) voitaisiin jättää huomiotta mutta niiden lisäksi ei sitten tarvitsisi hyväksyä muuta kuin numeroita. Vuoden voisi arpoa ±50 -säännöllä tai esim +20/-80 -säännöllä jos se on annettu kahdella numerolla.
täsmälleen mitä hain....kiitos
On olemassa javascriptillä tehty scriptin pätkä joka laittaa esim. .(pisteen) pakottavasti päivien jälkeen, kun kirjoittaa ekan päivämäärän tulee piste automaattisesti, kuukauden jälkeen tulee piste ja sitten vuosi eli 11.12.2010 eli käyttäjä ei voi syöttää väärin päivämäärää kenttään, samassa scriptissä on tarkistukset ja sitten kääntää annetun päivämäärän esim. mysqllän hyväksymään muotoon php:llä.
Ei ole mahdollista, koska päivämäärä voi olla yksi tai kaksinumeroinen (päivä tai kuukausi siis). Tai sitten on mahdollista, jos päivämäärä pitää kirjoittaa 01.02.2010
Jos halutaan, että käyttäjä valitsee päivämäärän, niin eikö olisi selkeämpää laittaa käyttäjä valitsemaan sen esim. "datepickerillä".
Tuo olisi kaikille kaikkein selkein tapa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.