আমি মিলিসেকেন্ড থেকে মাইক্রোসেকেন্ড সহ একটি ফর্ম্যাট তারিখ পাওয়ার চেষ্টা করছি।
একমাত্র সমস্যা হ'ল আমি 000000 পাচ্ছি
date("m-d-Y H:i:s.u", $milliseconds/1000);
প্রাক্তন। 07-28-2013 11: 26: 14.000000
আমি মিলিসেকেন্ড থেকে মাইক্রোসেকেন্ড সহ একটি ফর্ম্যাট তারিখ পাওয়ার চেষ্টা করছি।
একমাত্র সমস্যা হ'ল আমি 000000 পাচ্ছি
date("m-d-Y H:i:s.u", $milliseconds/1000);
প্রাক্তন। 07-28-2013 11: 26: 14.000000
উত্তর:
php.net বলেছেন:
মাইক্রোসেকেন্ডস (পিএইচপি 5.2.2 এ যুক্ত)। নোটটি
date()সর্বদা উত্পন্ন হবে000000যেহেতু এটি একটি পূর্ণসংখ্যার পরামিতি নেয়, অন্যদিকেDateTime::format()মাইক্রোসেকেন্ডগুলি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()রেফারেন্স থেকে শ্রেণি ব্যবহার :
$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মাইক্রোসেকেন্ডস (1 সেকেন্ড = 1000000 µ এস)।
পিএইচপি.এন.এর আরও একটি উদাহরণ :
$d2=new DateTime("2012-07-08 11:14:15.889342");
পিএইচপিএন - dateTime()তে রেফারেন্স
আমি প্রশ্নের উত্তরটি সংক্ষিপ্ত হিসাবে লিখেছি এবং লেখককে সহজীকরণ করেছি। লেখকের কাছে আরও তথ্যের জন্য দয়া করে দেখুন: তারিখের ফর্ম্যাট এমডিওয়াই এইচ: আই: সা মিলিসেকেন্ড থেকে
microtime(false)
আপনি সহজেই ইনপুট ফর্ম্যাট দিয়ে এটি করতে পারেন 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
তারিখের ফর্ম্যাটগুলির জন্য পিএইচপি ম্যানুয়াল পৃষ্ঠা থেকে:
http://php.net/manual/en/function.date.php
আমার মূল উত্তরের একটি ত্রুটি চিহ্নিত করার জন্য গিগসিকে ধন্যবাদ, number_format()লাইনে যুক্ত করা ঠিক দ্বিতীয়টির ক্ষেত্রে ঠিক করা উচিত। খুব খারাপ এটি আর তেমন মার্জিত মনে হয় না ...
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
http://php.net/manual/en/function.number-format.php
ডেভের প্রতিক্রিয়াতে সময় অঞ্চলগুলির একটি নোট।
সাধারণত কোনওটি নির্দিষ্ট না করা থাকলে createFromFormat()পদ্ধতিটি স্থানীয় সময় অঞ্চল ব্যবহার করবে।
http://php.net/manual/en/datetime.createfromformat.php
তবে, এখানে বর্ণিত কৌশলটি ডেটটাইম অবজেক্টটি ব্যবহার করে আরম্ভ করছে microtime() যা ইউনিক্স ইপোক (01 জানুয়ারী 1970: 00:00:00 জিএমটি) এর পরে কেটে যাওয়া সেকেন্ডের সংখ্যাটি দেয়।
http://php.net/manual/en/function.microtime.php
এর অর্থ হ'ল ডেটটাইম অবজেক্টটি ইউটিসি-তে স্পষ্টভাবে আরম্ভ করা হয়েছে, যা সার্ভারের অভ্যন্তরীণ কাজের জন্য ঠিক আছে যা কেবল সময় কাটানো সময় ট্র্যাক করতে চায়।
আপনার যদি কোনও নির্দিষ্ট সময় অঞ্চলের জন্য সময় প্রদর্শন করতে হয় তবে আপনাকে সে অনুযায়ী সেট করতে হবে। তবে, উপরোক্ত কারণগুলির কারণ হিসাবে এটি সূচনা ( তৃতীয় প্যারামিটার ব্যবহার না করা createFromFormat()) পরে পৃথক পদক্ষেপ হিসাবে করা উচিত ।
setTimeZone()পদ্ধতি এই প্রয়োজনীয়তা সম্পন্ন করার জন্য ব্যবহার করা যাবে।
http://php.net/manual/en/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")
DateTime::createFromFormat('U.u', microtime(true));হলে মিথ্যা ফিরে আসবে microtime(true)। এটি '1438616239.000000' এর পরিবর্তে '1438616239' দেয়।
number_formatসর্বদাই প্রয়োজনীয়, এমনকি এটি সঠিক সেকেন্ড নয়। অন্যথায় আপনি precisionপিএইচপি কনফিগারেশন বিকল্পের ("প্রদর্শনের জন্য") রহমতে রয়েছেন , যা পিএইচপি 7.0 হিসাবে পূর্বনির্ধারিতভাবে যথাযথভাবে ক্ষতি হ্রাসকারী (মাইক্রোসেকেন্ড পর্যন্ত সঠিক নয়) হিসাবে যথেষ্ট নয়।
এখানে একটি সামান্য খাটো পদ্ধতির। উচ্চ-নির্ভুলতার সংখ্যাসূচক তারিখ / সময় তৈরির জন্য কাজ করার পরিবর্তে, আমি মাইক্রোসেকেন্ড মানটিকে একটি স্ট্রিংয়ে রূপান্তর করি, মুছে ফেলি 0এবং তারিখ / সময় স্ট্রিংয়ের শেষে যুক্ত করি। আমি স্ট্রিংয়ের দৈর্ঘ্যের প্যারামিটারটি সামঞ্জস্য করে দশমিকের সংখ্যা সহজেই ছাঁটাতে পারি; এখানে আমি 4মিলিসেকেন্ডগুলি পেতে ব্যবহার করি তবে আপনি 7মাইক্রোসেকেন্ডগুলি পেতে ব্যবহার করতে পারেন।
$t = explode(" ",microtime());
echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);
একটি মাইক্রোটাইম () মানের জন্য 0.98236000 1407400573, এটি ফিরে আসে 08-07-14 01:08:13.982।
echo date('m-d-Y H:i:s').substr(fmod(microtime(true), 1), 1);
উদাহরণ আউটপুট:
02-06-2019 16:45:03.53811192512512
আপনার যদি দশমিক স্থানের সংখ্যা সীমাবদ্ধ করার প্রয়োজন হয় তবে নীচের লাইনটি (ক্রেডিট মিগ্লুট) একটি ভাল বিকল্প হবে। (নীচের কোড সহ, 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
echo date('m-d-Y H:i:').sprintf('%09.6f', date('s')+fmod(microtime(true), 1));। ব্যাখ্যা কেন আমরা প্রয়োজন 09: stackoverflow.com/a/28739819/318765
echo date('H:i:s').substr(fmod(microtime(true), 1), 1, 7);
substr() গোল হয় না। এবং এর সাথে সংমিশ্রণে round()পিছনের শূন্যগুলি কেটে ফেলবে: stackoverflow.com/questions/7493305/… আমার প্রস্তাব দেওয়ার কারণটি তা স্থির করে sprintf()।
আপনি যদি (new Date()).toISOString()কোনও কারণে জাভাস্ক্রিপ্টের মতো কোনও তারিখ ফর্ম্যাট করতে চান তবে এইভাবে আপনি পিএইচপি তে এটি করতে পারেন:
$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"
পিএইচপি করেনি দশমিক স্থান বৃত্তাকার, তা সবই তাদের উভয় ক্ষেত্রেই একই ভাবে বৃত্তাকার।
date('Y-m-d\TH:i:s', $time / 1000) . sprintf('.%03dZ', substr($time, 10));?
$timeইতিমধ্যে মিলিসেকেন্ডে থাকে তবে হ্যাঁ, এটি প্রযুক্তিগতভাবে কাজ করবে। ভালবেসো না substrহ্যাক, কিন্তু আমি এটা 2001 এবং 2286. মধ্যে তারিখগুলি জন্য কাজ করবে অনুমান
$timeএমএস, তবে কী 2286, আমি কেন এমনটি ভাবতে চাইছি এবং কীভাবে এড়ানো সম্ভব হবে?
এটি আর্ককোডমোনকি-র উত্তরের ভিত্তিতে তৈরি।
তবে কেবল সরলীকৃত, আপনি যদি এমন কিছু চান যা দ্রুত কাজ করে।
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");
পিএইচপি 7.1 হিসাবে আপনি কেবল এটি করতে পারেন:
$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );
এটি প্রদর্শিত হবে:
04-11-2018 10:54:01.321688
ডকুমেন্টেশন নিম্নলিখিত বলে:
মাইক্রোসেকেন্ডস (পিএইচপি 5.2.2 এ যুক্ত)। মনে রাখবেন যে তারিখটি () সর্বদা 000000 উত্পাদন করে যেহেতু এটি একটি পূর্ণসংখ্যার পরামিতি নেয়, অন্যদিকে ডেটটাইম :: ফর্ম্যাট () মাইক্রোসেকেন্ডগুলিকে সমর্থন করে।
অর্থাৎ এর পরিবর্তে ডেটটাইম ব্যবহার করুন।
new DateTime()জন্যও 0000 ফেরত দেবে। আপনি যদি এটি ইনস্ট্যান্ট করার সময় কোনও মাইক্রোসেকেন্ড-নির্ভুলতার সময় সরবরাহ করেন তবে এটি ঠিক আছে।
new DateTime( 'Y-m-d H:i:s.'.$micro);
পিএইচপি 7.0+ সহ এখন এখানে আপনি নিম্নলিখিতটি করতে পারেন:
$dateString = substr($millseconds_go_here,0,10);
$drawDate = new \DateTime(Date('Y-m-d H:i',$dateString));
$drawDate->setTimezone(new \DateTimeZone('UTC'));
এটি ক্রমে নিম্নলিখিতটি করে:
Date()তারিখটি পরিচালনা করতে পারে।DateTime()এরপরে আপনি যে টাইম জোনটিতে date_default_timezone_set("Timezone");রয়েছেন তা সংশোধন করার অনুমতি দিতে পারে তবে আপনি DateTime()ফাংশন এবং ক্লাস ব্যবহার করার আগে সেটি সেট হয়ে গেছে তা নিশ্চিত করুন ।DateTime()ক্লাস বা ফাংশন ব্যবহৃত হয় তখন আপনার সঠিক টাইমজোনটি আপনার সঠিক সময়টিতে নিশ্চিত হয়।@ আরককোডমোনকি উত্তরের ভিত্তিতে।
আপনার যদি আপনার declare(strict_types=1)কাছে থাকে তবে স্ট্রিংয়ে দ্বিতীয় যুক্তিটি castালাই করতে হবে
আমি কয়েকটি ভিন্ন উপায়ে বেঞ্চ করেছি:
1) মাইক্রোটাইম + এসস্কানফ + তারিখ:
sscanf(microtime(), '0.%6s00 %s', $usec, $sec);
$date = date('Y-m-d H:i:s.', $sec) . $usec;
আমি নিশ্চিত নই মাইক্রোটাইম () কেন মাইক্রোসেকেন্ড অংশের জন্য 10 টি চর (0.dddddd00) ফেরায় তবে কেউ আমাকে বলতে পারে?
$start_ts = microtime(true); for($i = 0; $i < 10000000; $i++) { sscanf(microtime(), '0.%6s00 %s', $usec, $sec); $date = date('Y-m-d H:i:s.', $sec) . $usec; } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "22372.335910797 ms" // macOS PHP 5.6.30
string(18) "16772.964000702 ms" // Linux PHP 5.4.16
string(18) "10382.229089737 ms" // Linux PHP 7.3.11 (same linux box as above)
2) ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট + ডেটটাইম-> ফর্ম্যাট:
$now = new DateTime('NOW');
$date = $now->format('Y-m-d H:i:s.u');
পিএইচপি 5.x এ কাজ করছে না ...
$start_ts = microtime(true); for($i = 0; $i < 10000000; $i++) { $now = new DateTime('NOW'); $date = $now->format('Y-m-d H:i:s.u'); } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "45801.825046539 ms" // macOS PHP 5.6.30 (ms not working)
string(18) "21180.155038834 ms" // Linux PHP 5.4.16 (ms not working)
string(18) "11879.796028137 ms" // Linux PHP 7.3.11 (same linux box as above)
3) getTimeofday + তারিখ:
$time = gettimeofday();
$date = date('Y-m-d H:i:s.', $time['sec']) . $time['usec'];
-
$start_ts = microtime(true); for($i = 0; $i < 10000000; $i++) { $time = gettimeofday(); $date = date('Y-m-d H:i:s.', $time['sec']) . $time['usec']; } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "23706.788063049 ms" // macOS PHP 5.6.30
string(18) "14984.534025192 ms" // Linux PHP 5.4.16
string(18) "7799.1390228271 ms" // Linux PHP 7.3.11 (same linux box as above)
4) মাইক্রোটাইম + সংখ্যা_ ফর্ম্যাট + তারিখটাইম :: তৈরি করুনফর্মফর্ম্যাট + তারিখটাইম-> ফর্ম্যাট:
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
$date = $now->format('Y-m-d H:i:s.u');
-
$start_ts = microtime(true); for($i = 0; $i < 10000000; $i++) { $now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', '')); $date = $now->format('Y-m-d H:i:s.u'); } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "83326.496124268 ms" // macOS PHP 5.6.30
string(18) "61982.603788376 ms" // Linux PHP 5.4.16
string(16) "19107.1870327 ms" // Linux PHP 7.3.11 (same linux box as above)
5) মাইক্রোটাইম + স্প্রিন্টফ + ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট + ডেটটাইম-> ফর্ম্যাট:
$now = DateTime::createFromFormat('U.u', sprintf('%.6f', microtime(true)));
$date = $now->format('Y-m-d H:i:s.u');
-
$start_ts = microtime(true); for($i = 0; $i < 10000000; $i++) { $now = DateTime::createFromFormat('U.u', sprintf('%.6f', microtime(true))); $date = $now->format('Y-m-d H:i:s.u'); } var_dump((microtime(true) - $start_ts)*1000 . ' ms');
string(18) "79387.331962585 ms" // macOS PHP 5.6.30
string(18) "60734.437942505 ms" // Linux PHP 5.4.16
string(18) "18594.941139221 ms" // Linux PHP 7.3.11 (same linux box as above)