Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: microtime

artz86 [13.03.2013 22:06:35]

#

Hei!

On varmaan joku käyttänyt kyseistä microtime funktiota.

Kuinka käytännössä toimii, jos esimerkiksi on aika 11:01:00 joka pitäisi muuttaa mikrosekunneiksi?

vesikuusi [13.03.2013 22:41:47]

#

Saat mikrosekunnit seuraavasti

$aika = new DateTime ( "12-12-2012" ); // <-- parametriksi haluamasi aika
$mikrosekunnit = $aika->format ( "u" );

Edit. Korjasin virheen koodissa

Lisäys: Kummallista kyllä, mutta minulla tuo palauttaa aina nollan, vaikka on PHP 5.4.6 ja dokumentaation mukaan pitäisi toimia...

makumaku [14.03.2013 08:38:01]

#

Halutaanko muuttaa siis päivämäärää (sekuntteja 1.1.1970 jälkeen) vaiko aikamäärää millisekunneiksi. Jos aikamäärä on formaatissa "11:01:00", niin tuohan menee ihan perinteisesti

$aika = "11:01:00";
list($tunnit, $minuutit, $sekunnit) = explode(":", $aika);
$millisekunnit = (3600 * $tunnit + 60 * $minuutit + $sekunnit) * 1000;

Othnos [14.03.2013 08:55:34]

#

Hyvin toimii myös vesikuusen koodi

<?php
$aika = new DateTime ( "2012-12-12 11:01:00.254" ); // <-- parametriksi haluamasi aika
$mikrosekunnit = $aika->format ( "u" );

echo $mikrosekunnit; // 254000 mikrosekunttia
?>

vesikuusi [14.03.2013 08:57:27]

#

makumaku kirjoitti:

Halutaanko muuttaa siis päivämäärää (sekuntteja 1.1.1970 jälkeen) vaiko aikamäärää millisekunneiksi. Jos aikamäärä on formaatissa "11:01:00", niin tuohan menee ihan perinteisesti

$aika = "11:01:00";
list($tunnit, $minuutit, $sekunnit) = explode(":", $aika);
$millisekunnit = (3600 * $tunnit + 60 * $minuutit + $sekunnit) * 1000;

Tuolla saat kyllä mikrosekuntimuodon, mutta et tarkkoja mikrosekunteja ;)

Lisäys:

Othnos kirjoitti:

Hyvin toimii myös vesikuusen koodi

<?php
$aika = new DateTime ( "2012-12-12 11:01:00.254" ); // <-- parametriksi haluamasi aika
$mikrosekunnit = $aika->format ( "u" );

echo $mikrosekunnit; // 254000 mikrosekunttia
?>

Ainiiin, oletin jostain syystä, että nuo mikrosekunnit olisi jokin UNIX timestampin mikrosekuntiversio... Mutta senkin saa tietysti pienellä laskutoimituksella :D

syyskimo [14.03.2013 11:25:46]

#

Koska tämä ketju on sen verran hauska, niin tahdon ehdottomasti osallistua tuotoksellani "juna on nopea, mutta kyllä perille pääsee pingviinilläkin":

$string = '11:01:00';
$multiplier = 3600;
$ten_pow = 1;
$secs = 0;
$micro_suffix = '000000';
for ($i = 0; $i < strlen($string); $i++)
{
    if ($string{$i} == ':') {
        $multiplier = ($multiplier / 60);
        $ten_pow = 1;
    }
    else
    {
        $secs += intval($string{$i}) * $multiplier * pow(10, $ten_pow--);
    }
}
echo "$string : {$secs}{$micro_suffix}";

Jos ihan aiheesta puhutaan niin ensimmäinen sekunnin tarkan ajanjakson saa mikrosekunneikse laittamalla vaikka '.000000' tuohon perään.
"11:01:00.000000"

Eli mitä kysyjä alunperin tarvitsi? Sekunnin muutos mikrosekunniksi on turhaa hommaa. Yleensä jos mikrosekunteja johon tarvitsee niin silloin käytetään microtime -funktiota (jos laitat siihen true:n parametriksi pääset suoraan leikkimään floateilla ja hommat on melko suoraviivaisia).

Mutta jos tosiaan halutaan muuttaa tuo alkuperäinen aika (tai siis sen tyyppinen aika) mikrosekunniksi niin tarvitaan ensin muunnos sekunneiksi, se kannattaa tehdä vaikka tuolla makumakun esittelemällä tavalla, jonka jälkeen voi sitten lisäillä niitä loppunollia haluamallaan tavalla.

Vastaus

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

Tietoa sivustosta