Comment obtenir milliseconde entre deux J'ai essayé de suivre le commentaire ci-dessous, mais j'ai eu une erreur. p> i obtenir l'erreur p> appel à la méthode non définie DateTime :: gettiMestamp () p>
blockQuote> p> DateTime code> Objets?
5 Réponses :
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
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.
Dans le sens strict, vous ne pouvez pas.
C'est parce que la plus petite unité de temps pour la classe DateTime est une seconde. p>
Si vous avez besoin d'une mesure contenant des millisecondes, utilisez microtime () p>
EDIT: strong> p> P> D'autre part Si vous voulez simplement obtenir l'intervalle en millisecondes entre deux ISO-8601 DateTimes A> Ensuite, une solution possible serait p> méfiez-vous par défaut la fonction ci-dessus renvoie la différence absolue. Si vous voulez savoir si la première date est plus tôt ou non, définissez la troisième argument sur FALSE. P> // Outputs 60000
echo millisecsBetween("2010-10-26 20:30", "2010-10-26 20:31");
// Outputs -60000 indicating that the first argument is an earlier date
echo millisecsBetween("2010-10-26 20:30", "2010-10-26 20:31", false);
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 code> prend actuellement en charge la sous-seconde précision - par exemple: Echo DateTime :: CreateFromFormat ("Uu", "1234567890.987654") -> Format ("YMD H: I: SU") Code> Sorties 2009-02-13 23: 31: 30.987654 Code>.
Désolé de diverser une ancienne question, mais j'ai trouvé un moyen d'obtenir l'horodatage millisecondes à partir d'un objet DateTime: Il nécessite toutefois que votre objet DateTime contient les microsecondes (u dans le format): p> 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);
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); code>
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;
}
Voici une fonction pour faire cela + tests. P>
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.