it-swarm.dev

الحصول على تنسيق التاريخ m-d-Y H: i: s.u من مللي ثانية

أحاول الحصول على تاريخ منسق ، بما في ذلك ميكروثانية من ميلي ثانية.

المشكلة الوحيدة هي أنني أواصل الحصول على 000000

date("m-d-Y H:i:s.u", $milliseconds/1000);

السابق. 07-28-2013 11: 26: 14.000000

93
slik

php.net يقول:

Microseconds (تمت إضافته في PHP 5.2.2). لاحظ أن date() ستنشئ دائمًا 000000 نظرًا لأن الأمر يتطلب معلمة عدد صحيح ، في حين أن DateTime::format() تدعم microseconds إذا تم إنشاء DateTime مع ميكروثانية.

لذلك استخدم بسيط:

$micro_date = microtime();
$date_array = explode(" ",$micro_date);
$date = date("Y-m-d H:i:s",$date_array[1]);
echo "Date: $date:" . $date_array[0]."<br>";

الموصى بها واستخدام dateTime() class من المشار إليها:

$t = microtime(true);
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );

print $d->format("Y-m-d H:i:s.u"); // note at point on "u"

ملاحظة u هي microseconds (ثانية واحدة = 1000000 µs).

مثال آخر من php.net :

$d2=new DateTime("2012-07-08 11:14:15.889342");

مرجع dateTime() on php.net

لقد أجبت على السؤال باختصار وأبسط المؤلف. يرجى الاطلاع على مزيد من المعلومات للمؤلف: الحصول على تنسيق تاريخ m-d-Y H: i: s.u من مللي ثانية

110
Marin Sagovac

يمكنك القيام بذلك بسهولة باستخدام تنسيق الإدخال U.u.

$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");

هذا ينتج المخرجات التالية:

04-13-2015 05:56:22.082300

من PHP الصفحة اليدوية لتنسيقات التاريخ:

  • U = ثانية منذ عصر يونكس
  • ش = ميكروثانية

http://php.net/manual/ar/function.date.php


شكرًا لك على giggsey لتوضيح عيب في إجابتي الأصلية ، إضافة number_format() إلى السطر يجب إصلاح حالة الثانية بالضبط. سيء جدًا ، لم يعد يبدو أنيقًا تمامًا بعد الآن ...

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));

http://php.net/manual/ar/function.number-format.php


ملاحظة على المناطق الزمنية استجابة لـ DaVe.

عادةً ما تستخدم طريقة createFromFormat() المنطقة الزمنية المحلية إذا لم يتم تحديدها.

http://php.net/manual/ar/datetime.createfromformat.php

ومع ذلك ، فإن التقنية الموضحة هنا هي تهيئة كائن DateTime باستخدام microtime() والتي تُرجع عدد الثواني المنقضية منذ فترة Unix (01 يناير 1970 00:00:00 بتوقيت جرينتش).

http://php.net/manual/ar/function.microtime.php

هذا يعني أنه تمت تهيئة كائن DateTime ضمنيًا إلى التوقيت العالمي المتفق عليه (UTC) ، وهو أمر جيد للمهام الداخلية للخادم التي تريد فقط تتبع الوقت المنقضي.

إذا كنت بحاجة إلى عرض الوقت لمنطقة زمنية معينة ، فأنت بحاجة إلى ضبطها وفقًا لذلك. ومع ذلك ، يجب أن يتم ذلك كخطوة منفصلة بعد التهيئة ( لا باستخدام المعلمة الثالثة من createFromFormat()) بسبب الأسباب التي تمت مناقشتها أعلاه.

يمكن استخدام الأسلوب setTimeZone() لإنجاز هذا المطلب.

http://php.net/manual/ar/datetime.settimezone.php

كمثال:

$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';

$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';

تنتج الإخراج التالي:

10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818

لاحظ أنه إذا كنت تريد الإدخال في mysql ، فيجب أن يكون تنسيق الوقت:

format("Y-m-d H:i:s.u")
112
ArchCodeMonkey

إليك مقاربة أقصر قليلاً. بدلاً من العمل على إنشاء تاريخ/وقت رقمي عالي الدقة ، أقوم بتحويل قيمة ميكروثانية إلى سلسلة وإزالة 0 وأضفها إلى نهاية سلسلة التاريخ/الوقت. يمكنني بسهولة خفض عدد الكسور العشرية عن طريق ضبط المعلمة طول السلسلة. هنا أستخدم 4 للحصول على ميلي ثانية ، لكن يمكنك استخدام 7 للحصول على ميكروثانية.

$t = explode(" ",microtime());
echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);

للحصول على قيمة microtime () لـ 0.98236000 1407400573 ، يُرجع هذا 08-07-14 01:08:13.982.

12
thotso

أنا استخدام

echo date("Y-m-d H:i:s.").gettimeofday()["usec"];

output: 2017-09-05 17:04:57.555036
6
bamossza
echo date('m-d-Y H:i:s').substr(fmod(microtime(true), 1), 1);

مثال الإخراج:

02-06-2019 16:45:03.53811192512512

إذا كنت بحاجة إلى تحديد عدد المنازل العشرية ، فسيكون السطر التالي (الائتمان mgutt) بديلاً جيدًا. (مع الكود أدناه ، يحدد الـ 6 عدد المنازل العشرية بـ 6.)

echo date('m-d-Y H:i:').sprintf('%09.6f', date('s')+fmod(microtime(true), 1));

مثال الإخراج:

02-11-2019 15:33:03.624493
5
ghbarratt

إليك طريقة أخرى أجدها أكثر أناقة/بسيطة:

echo date('Y-m-d-H:i:s.').preg_replace("/^.*\./i","", microtime(true));
2
SDpyro

إذا كنت ترغب في تنسيق تاريخ مثل (new Date()).toISOString() في JavaScript لسبب ما ، فهذه هي الطريقة التي يمكنك بها ذلك في PHP:

$now = microtime(true);
gmdate('Y-m-d\TH:i:s', $now).sprintf('.%03dZ',round(($now-floor($now))*1000));

إخراج العينة:

2016-04-27T18:25:56.696Z

فقط لإثبات أن طرح العدد بالكامل لا يقلل من دقة الجزء العشري:

>>> number_format(123.01234567890123456789,25)
=> "123.0123456789012408307826263"
>>> number_format(123.01234567890123456789-123,25)
=> "0.0123456789012408307826263"

قام PHP فعل بتدوير المنازل العشرية ، لكنه تم تقريبها بالطريقة نفسها في كلتا الحالتين.

2
mpen
// Procedural
$fineStamp = date('Y-m-d\TH:i:s') . substr(microtime(), 1, 9);
echo $fineStamp . PHP_EOL;

// Object-oriented (if you must). Still relies on $fineStamp though :-\
$d = new DateTime($fineStamp);
echo $d->format('Y-m-d\TH:i:s.u') . PHP_EOL;
1
Geo

هذا يعتمد على الإجابة من ArchCodeMonkey.

ولكن بساطة فقط ، إذا كنت تريد فقط شيء سريع يعمل.

function DateTime_us_utc(){
    return DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
}
function DateTime_us(){
    $now = DateTime_us_utc();
    return $now->setTimeZone(new DateTimeZone(date_default_timezone_get()));
}

لذلك بالنسبة لي بعد ذلك

$now = DateTime_us();
$now->format("m-d-Y H:i:s.u");
1
John Kearney

اعتبارًا من PHP 7.1 ، يمكنك ببساطة القيام بذلك:

$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );

سيتم عرض كـ:

04-11-2018 10:54:01.321688
0
Harveyhase68

إذا كنت تستخدم Carbon ، يمكنك استخدام المواصفات المحددة "RFC3339_EXTENDED". أو تخصيصها.

Carbon::RFC3339_EXTENDED = 'Y-m-d\TH:i:s.vP';
0
Aiden Moon

باستخدام PHP 7.0+ الآن ، يمكنك القيام بما يلي:

$dateString = substr($millseconds_go_here,0,10);
$drawDate = new \DateTime(Date('Y-m-d H:i',$dateString));
$drawDate->setTimezone(new \DateTimeZone('UTC'));

هذا ما يلي بالترتيب:

  1. يحرك الأصفار الأربعة الأخيرة خارج السلسلة بحيث يمكن Date() التعامل مع التاريخ.
  2. يستخدم التاريخ لتنسيق مللي ثانية في سلسلة وقت التاريخ التي يمكن أن يفهمها DateTime.
  3. يمكن لـ DateTime() أن يسمح لك بعد ذلك بتعديل المنطقة الزمنية التي تتواجد فيها ، لكن تأكد من تعيين date_default_timezone_set("Timezone"); قبل استخدام وظائف وفئات DateTime().
  4. من الممارسات الجيدة استخدام مُنشئ في فصولك الدراسية للتأكد من أنك في المنطقة الزمنية الصحيحة عند استخدام فئات أو وظائف DateTime().
0
Jamie Ross

الوثائق تقول ما يلي:

Microseconds (تمت إضافته في PHP 5.2.2). لاحظ أن التاريخ () سيُنشئ دائمًا 000000 لأنه يأخذ معلمة عدد صحيح ، في حين يدعم DateTime :: format () ميكروثانية.

على سبيل المثال ، استخدم DateTime بدلاً من ذلك.

0
Havsmonstret

بناء على إجابةArchCodeMonkey.

إذا كان لديك declare(strict_types=1) ، فيجب عليك توجيه الوسيطة الثانية إلى السلسلة

 enter image description here 

0
SandroMarques