Minulla on päivämäärä muodossa 200704101841 (eli 10. huhtikuuta 2007 kello 18:41). Explodella voisi pilkkoa sen, mutta kun ei ole mitään siellä välissä, millä pilkkoa. En todellakaan myöskään osaa hakea PHP:n manuskasta, kun en edes tiedä, mitä hakea.
Miten voisin saada tämän päivämäärän erikseen, niin että olisi esim. arrayssa nuo numerot?
Esim. Array ( [0] => 2007 [1] => 04 [2] => 10 [3] => 18 [4] => 41 )
Kiitos.
Kannattaa vilkuilla sieltä manuskasta joko substr tai preg_match
Jälkimmäisellä tyyliin seuraavasti. Huono puolihan tossa on että arrayn ekaksi tulee tuo koko aika. Ja jollain modifierilla saisi määriteltyä että ei kelpaa kuin numerot, nythän sille riittää että merkkijonon pituus on 12 merkkiä.
<?php $aika='200704101907'; if (0==preg_match('/^(....)(..)(..)(..)(..)$/',$aika,$matches)) die('Epäkelpo aika'); unset($matches[0]); print_r($matches); ?>
Kiitän. Pelastit taas päiväni.
Tai sitten
<?php print_r(date_parse('200704101841')); ?>
date_parse on tosiaankin kätevä :)
Tai sitten ei?
No jos on PHP 5.1.3 tai uudempi, niin mikä ettei.
Itselläni on 5.1.4. ja tyhjä sivu date_parsan kanssa.
Niin, tulipas sanottua tyhmä kommentti kun en testiympäristön vanhalla PHP-tulkkiversiolla päässyt testaamaan. Eli tuohan ei tosiaan ole sopivassa muodossa strtotimelle eikä näin ollen myöskään date_parselle.
Grez kirjoitti:
Niin, tulipas sanottua tyhmä kommentti kun en testiympäristön vanhalla PHP-tulkkiversiolla päässyt testaamaan. Eli tuohan ei tosiaan ole sopivassa muodossa strtotimelle eikä näin ollen myöskään date_parselle.
Hmmm....miksikäs ei? Itselläni on PHP 5.2.1 niin tuo koodinpätkä palauttaa
Array ( [year] => 2007 [month] => 4 [day] => 10 [hour] => 18 [minute] => 41 [second] => 0 [fraction] => [warning_count] => 0 [warnings] => Array ( ) [error_count] => 0 [errors] => Array ( ) [is_localtime] => )
Siis toimii niinkuin pitää. Tosiaan vaatii aika uuden PHP:n.
SysRq868 kirjoitti:
Itselläni on 5.1.4. ja tyhjä sivu date_parsan kanssa.
Parsa on syötävää, joten koita date_parsen kanssa joskos sillä toimisi ;) Ainakin itselläni jos laitoin tuolle functiolle virheellisen syötteen niin errors kohdassa näkyi mikä vialla.
No kai tuo sitten riippuu monista tekijöistä mitä strtotime palauttaa eli mitä merkkijonoja se hyväksyy päivämääriksi.
Joka tapauksessa date_parse funktion dokumentaatio sanoo että parametri "Date in format accepted by strtotime()."
Kun annan omalle PHP-tulkilleni strtotime('200704101841') niin palautteena on -1. (Previous to PHP 5.1.0, this function would return -1 on failure)
Dokumentaatio sanoo "The function expects to be given a string containing a US English date format"
Eli mitään lupausta että tuollainen putkeen kirjoitettu numeromuoto kelpaisi ei ole tehty. Ilmeisesti joissakin järjestelmissä se toimii tuurilla.
Uuemmassa PHP:ssa (5.2.1-pl3-gentoo) tosiaan toimii tuo strtotimekin tuolla numerosarjaparametrilla, joten date_parsen dokumentaatio on oikein--strtotimen toiminta vain on vaihtunut versioiden välillä :)
Enpä kyllä noihin automaagisiin date_parse() funkkareihin kauheasti luottaisi.
$aika='200704101907'; $lopputulos = array( substr($aika, 0, 4), substr($aika, 4, 2), substr($aika, 6, 2), substr($aika, 8, 2), substr($aika, 10, 2) );
Jostain syystä tämä on minusta paljon selkeämpää kuin regular expressionit.
Itsekin tekisin sen noilla substr:llä. Laitoin tuon preg_match -esimerkin postaukseeni vain sen takia, että kun tarjosin sekä substr että preg_matchin katsomista manuaalista. Ajattelin, että substr:llä toteutettuna tuo on itsestäänselvä, mutta preg_match voi jäädä hämäräksi ilman esimerkkiä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.