7
votes

Comment obtenir millisecond entre deux DateTime Obj?

Comment obtenir milliseconde entre deux DateTime Objets? xxx

J'ai essayé de suivre le commentaire ci-dessous, mais j'ai eu une erreur. xxx

i obtenir l'erreur

appel à la méthode non définie DateTime :: gettiMestamp ()


0 commentaires

5 Réponses :


-3
votes

Les dates DateTime ne sont stockées que dans des secondes entières. Si vous avez toujours besoin du nombre de millisecondes entre deux dates DateTime, vous pouvez utiliser GetTimeStamp () pour obtenir chaque fois en quelques secondes (puis obtenir la différence et la transformer en millisecondes):

$seconds_diff = $date2.getTimestamp() - $date.getTimestamp()
$milliseconds_diff = $seconds_diff * 1000


6 commentaires

J'aurais probablement pu mentionné ce que Saul a mentionné :)


+1 Comme il s'agit vraiment de la seule méthode (dans le concept au moins) de prendre deux dates de deuxième précision et d'obtenir le nombre de millisecondes entre eux ...


@Saul hehe .. 1 Deuxième est de 1000 millisecondes .. Ça ne va pas vous obtenir plus de précision que quelques secondes, mais c'est une réponse valide.


@Fosco: Yup, je pensais à la précision, mais je regarde votre 1er commentaire en même temps, d'où le mixup.


désolé cela obtenez une erreur $ STIME = nouvelle dateTime ($ starttime-> format ("D-M-Y H: I: S"); $ ETIME = nouveau DateTime ($ Endtime-> format ("D-M-Y H: I: S")); $ millisec = $ etime-> gettiMestamp () - $ stame-> gettimaestamp (); "Appelez à la méthode non définie DateTetime :: gettiMestamp ()"


Il semble peu probable que l'OP voulait simplement montrer des secondes complètes avec des millisecondes. Vous devriez au moins nettoyer les mathématiques.



18
votes

4 commentaires

Ainsi, $ date = nouvelle dateTime ();


Êtes-vous sûr que DateTime utilise un horodatage UNIX en interne? Je pensais que cela pourrait représenter une plus grande gamme de dates.


@JW: Bien que je pensais plus dans les lignes d'un format comme ayant une unité la plus petite spécifique, vous faites un point valide. Les valeurs réelles pour DateTime peuvent certainement passer en dessous de 1970 et se référer à l'horodatage UNIX pourraient suggérer autrement. Corrigé ça.


DateTime prend actuellement en charge la sous-seconde précision - par exemple: Echo DateTime :: CreateFromFormat ("Uu", "1234567890.987654") -> Format ("YMD H: I: SU") Sorties 2009-02-13 23: 31: 30.987654 .



5
votes

Désolé de diverser une ancienne question, mais j'ai trouvé un moyen d'obtenir l'horodatage millisecondes à partir d'un objet DateTime: xxx pré>

Il nécessite toutefois que votre objet DateTime contient les microsecondes (u dans le format): p> xxx pré>

Ceci fonctionne que depuis PHP 5.2, la prise en charge des microsecondes sur DateTime a été ajoutée alors. P>

avec cette fonction Votre code deviendrait les suivants: P>

$date_str = "1990-08-07 20:46:00.588";
$date1 = DateTime::createFromFormat("Y-m-d H:i:s.u", $date_str);

$msNow = (int)microtime(true)*1000;

echo $msNow - dateTimeToMilliseconds($date1);


1 commentaires

Très bonne réponse! Cependant, il y a une petite erreur dans l'exemple. Je devais ajouter des parenthèses pour que le microtime est multiplié avant la mise entière sur entier, comme: $ msnow = (int) (microtime (vrai) * 1000);



0
votes

DateTime prend en charge les microsecondes depuis 5.2.2. Ceci est mentionné dans la documentation de la fonction de date, mais porte à répéter ici. Vous pouvez créer une dateTime avec des secondes fractionnaires et récupérer cette valeur à l'aide de la chaîne de format «U».

<?php
// Instantiate a DateTime with microseconds.
$d = new DateTime('2011-01-01T15:03:01.012345Z');

// Output the microseconds.
echo $d->format('u'); // 012345

// Output the date with microseconds.
echo $d->format('Y-m-d\TH:i:s.u'); // 2011-01-01T15:03:01.012345

// Unix Format
echo "<br>d2: ". $d->format('U.u');

function get_data_unix_ms($data){
    $d = new DateTime($data);
    $new_data = $d->format('U.u');
    return $new_data;
}

function get_date_diff_ms($date1, $date2)
    {
        $d1 = new DateTime($date1);
        $new_d1 = $d1->format('U.u');

        $d2 = new DateTime($date2);
        $new_d2 = $d2->format('U.u');

        $diff = abs($new_d1 - $new_d2);

        return $diff;
    }


0 commentaires

-1
votes

Voici une fonction pour faire cela + tests.

https://gist.github.com/vudaltsov/0bb623b9e2817CFBF229D


1 commentaires

Les réponses courtes avec les URL sont considérées comme une qualité médiocre lorsque le lien externe peut changer ou casser. S'il vous plaît voir Comment répondre et modifier votre réponse pour inclure les détails de la clé du lien.