উত্তর:
সংক্ষিপ্ত উত্তর হল:
$milliseconds = round(microtime(true) * 1000);
microtime(true) / 1000(মাল্টিপ্লাইকের পরিবর্তে বিভাগ)?
ব্যবহার microtime। এই ফাংশনটি একটি স্পেস দ্বারা পৃথক একটি স্ট্রিং প্রদান করে। প্রথম অংশটি সেকেন্ডের ভগ্নাংশ, দ্বিতীয় অংশটি অবিচ্ছেদ্য অংশ। মধ্যে পাস trueএকটি সংখ্যা হিসাবে পেতে:
var_dump(microtime()); // string(21) "0.89115400 1283846202"
var_dump(microtime(true)); // float(1283846202.89)
আপনি যদি ব্যবহার করেন তবে নির্ভুল ক্ষতি থেকে সাবধান থাকুন microtime(true)।
এমনও রয়েছে gettimeofdayযা মাইক্রোসেকেন্ডগুলি অংশ হিসাবে পূর্ণসংখ্যা হিসাবে প্রদান করে।
var_dump(gettimeofday());
/*
array(4) {
["sec"]=>
int(1283846202)
["usec"]=>
int(891199)
["minuteswest"]=>
int(-60)
["dsttime"]=>
int(1)
}
*/
microtime()সমান 1000*time(), তাই না?
1000, তাই না?
microtime(true)এবং1000*time()
1000*time()আপনাকে মিলিসেকেন্ড দেবে না। microtime(true)একটি ফেরৎ floatযা স্পষ্টতা 14 সংখ্যা আছে। সেকেন্ডের অংশটি ইতিমধ্যে 10 নিয়েছে, যাতে মাইক্রোসেকেন্ডের অংশের জন্য 4 অঙ্ক থাকে। এটি পর্যাপ্ত হতে হবে যেহেতু মিলিসেকেন্ডগুলিতে কেবলমাত্র 3 টি অতিরিক্ত অঙ্কের প্রয়োজন।
শুধুমাত্র 64 বিট প্ল্যাটফর্ম!
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
[ আপনি যদি 64 বিট পিএইচপি চালাচ্ছেন তবে ধ্রুবকের PHP_INT_SIZEসমান হয়8 ]
যদি আপনি time()মিলি সেকেন্ডে একটি ভারসাম্যপূর্ণ ফাংশন চান তবে আপনাকে প্রথমে বিবেচনা করতে হবে যে time()"যুগের সময়" (01/01/1970) থেকে সেকেণ্ডার সংখ্যাটি ফিরে আসার সাথে সাথে, "যুগের সময়" থেকে মিলি সেকেন্ডের সংখ্যাটি একটি বড় সংখ্যা এবং 32 বিট পূর্ণসংখ্যার সাথে ফিট করে না।
প্ল্যাটফর্মের উপর নির্ভর করে পিএইচপি-তে কোনও পূর্ণসংখ্যার আকার 32 বা 64 বিট হতে পারে।
Http://php.net/manual/en/language.tyype.integer.php থেকে
একটি পূর্ণসংখ্যার আকার প্ল্যাটফর্ম নির্ভর although -৪-বিট প্ল্যাটফর্মগুলির উইন্ডোজ বাদে সাধারণত প্রায় 9E18 এর সর্বাধিক মান থাকে যা সর্বদা 32 বিট থাকে। পিএইচপি স্বাক্ষরবিহীন পূর্ণসংখ্যার সমর্থন করে না। ধ্রুবক PHP_INT_SIZE এবং পিএইচপি ৪.৪.০ এবং পিএইচপি ৫.০.৫ থেকে ধ্রুবক PHP_INT_MAX ব্যবহার করে পূর্ণসংখ্যার আকার নির্ধারণ করা যেতে পারে।
আপনার যদি 64 বিট পূর্ণসংখ্যা থাকে তবে আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
microtime() "যুগের সময়" থেকে সেকেন্ডের সংখ্যার সাথে স্পেস দ্বারা পৃথক দুটি সংখ্যার সাথে মাইক্রোসেকেন্ডগুলিতে যথার্থতা ফিরে আসে ...
0.90441300 1409263371
দ্বিতীয় সংখ্যাটি হ'ল সেকেন্ড (পূর্ণসংখ্যা) এবং প্রথমটি দশমিক অংশ।
উপরের ফাংশনটি milliseconds()পূর্ণসংখ্যার অংশকে গুণ করে1000
1409263371000
তারপরে দশমিক অংশকে গুণিত করে 1000এবং 0 দশমিক হয় round
1409263371904
মনে রাখবেন যে উভয় $mt[1]এবং ফলাফল roundকাস্ট করা হয় int। এটি প্রয়োজনীয় কারণ তারা হ'ল floatএবং ingালাই ছাড়াই তাদের উপর ক্রিয়াকলাপটি ফাংশনটিতে ফিরে আসবে float।
অবশেষে, এই ফাংশনটি তুলনায় কিছুটা সুনির্দিষ্ট
round(microtime(true)*1000);
এটি 1:10 এর অনুপাত সহ (আনুমানিক) সঠিক ফলাফলের চেয়ে 1 মিলিসেকেন্ড বেশি দেয়। এটি ফ্লোট টাইপের সীমিত নির্ভুলতার কারণে হয় ( microtime(true)একটি ফ্লোট ফেরত দেয়)। যাইহোক আপনি যদি এখনও খাটো পছন্দ করেন তবে round(microtime(true)*1000);আমি ফলাফলটিতে কাস্টিংয়ের পরামর্শ দেব int।
এমনকি যদি এটি প্রশ্নের ক্ষেত্রের বাইরেও থাকে তবে এটি উল্লেখ করার মতো যে যদি আপনার প্ল্যাটফর্মটি b৪ বিট পূর্ণসংখ্যার সমর্থন করে তবে আপনি ওভারফ্লোতে ব্যয় না করে বর্তমান সময়টি মাইক্রোসেকেন্ডেও পেতে পারেন ।
যদি সত্য 2^63 - 1(বৃহত্তম স্বাক্ষরিত পূর্ণসংখ্যা) দ্বারা ভাগ করা হয় 10^6 * 3600 * 24 * 365(এক বছরে প্রায় মাইক্রোসেকেন্ডস) দেয় 292471।
আপনি যে একই মান পাবেন
echo (int)( PHP_INT_MAX / ( 1000000 * 3600 * 24 * 365 ) );
অন্য কথায়, একটি স্বাক্ষরিত 64 বিট পূর্ণসংখ্যার 200,000 বছরেরও বেশি সময়কাল মাইক্রোসেকেন্ডে পরিমাপ করার জন্য জায়গা থাকে।
আপনার তখন থাকতে পারে
function microseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}
অন্যরা যেমন বলেছে, আপনি microtime()টাইমস্ট্যাম্পগুলিতে মিলিসেকেন্ড যথার্থতা পেতে ব্যবহার করতে পারেন ।
আপনার মন্তব্যগুলি থেকে, আপনি এটি একটি উচ্চ-নির্ভুলতা ইউনিক্স টাইমস্ট্যাম্প হিসাবে চান বলে মনে হচ্ছে। DateTime.Now.Ticksনেট নেটওয়ার্কের মতো কিছু ।
আপনি এটি করতে নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন:
function millitime() {
$microtime = microtime();
$comps = explode(' ', $microtime);
// Note: Using a string here to prevent loss of precision
// in case of "overflow" (PHP converts it to a double)
return sprintf('%d%03d', $comps[1], $comps[0] * 1000);
}
microtime(true)পিএইচপি 5 ব্যবহার করুন , বা পিএইচপি 4 এ নিম্নলিখিত পরিবর্তন করুন:
array_sum(explode(' ', microtime()));
এই কোডটি লেখার একটি বহনযোগ্য উপায় হ'ল:
function getMicrotime()
{
if (version_compare(PHP_VERSION, '5.0.0', '<'))
{
return array_sum(explode(' ', microtime()));
}
return microtime(true);
}
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
আউটপুট:
2016-11-19 15:12:34.346351
$t = gettimeofday(); echo date('Y-m-d H:i:s.',$t['sec']) . $t['usec'];
$timeofday=gettimeofday(); echo sprintf("%s.%06d", date('Y-m-d H:i:s', $timeofday['sec']), $timeofday['usec']);
এটা চেষ্টা কর:
public function getTimeToMicroseconds() {
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
$d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));
return $d->format("Y-m-d H:i:s.u");
}
আপনি 32-বিট পিএইচপিতে থাকলেও এটি কাজ করে:
list($msec, $sec) = explode(' ', microtime());
$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'
নোট করুন এটি আপনাকে পূর্ণসংখ্যার দেয় না, তবে স্ট্রিং দেয়। তবে এটি বেশিরভাগ ক্ষেত্রে সূক্ষ্মভাবে কাজ করে, উদাহরণস্বরূপ যখন আরআরএসটি অনুরোধগুলির জন্য ইউআরএল তৈরি করা হয়।
আপনার যদি পূর্ণসংখ্যার প্রয়োজন হয়, 64৪-বিট পিএইচপি বাধ্যতামূলক।
তারপরে আপনি উপরের কোডটি পুনরায় ব্যবহার করতে পারেন এবং (int) এ কাস্ট করতে পারেন:
list($msec, $sec) = explode(' ', microtime());
// these parentheses are mandatory otherwise the precedence is wrong!
// ↓ ↓
$time_milli = (int) ($sec.substr($msec, 2, 3)); // 1491536422147
$time_micro = (int) ($sec.substr($msec, 2, 6)); // 1491536422147300
অথবা আপনি ভাল 'ওয়ান-লাইনার ব্যবহার করতে পারেন:
$time_milli = (int) round(microtime(true) * 1000); // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;
দ্রষ্টব্য: মাইক্রোটাইম () সহ উন্নতির কারণে এই ফাংশনটির জন্য পিএইচপি 5 প্রয়োজনীয় এবং বিসি গণিত মডিউলটিও প্রয়োজনীয় (আমরা যেমন প্রচুর সংখ্যক নিয়ে কাজ করছি, আপনি phpinfo এর মডিউলটি পরীক্ষা করে দেখতে পারেন)।
আশা করি এটি আপনাকে সাহায্য করবে।
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
($the_date_time->format('u') / 1000);
পিএইচপি 5.2.2 <
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.u"); // u : Microseconds
পিএইচপি 7.0.0 <7.1
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.v"); // v : Milliseconds
time()।microtime(true)অন্যদিকে, ইউনিক্সটি নিকটতম মাইক্রোসেকেন্ডে সঠিকভাবে (পিএইচপি রেফারেন্স দেখুন) সেকেন্ডে বর্তমান সময়টি ফিরিয়ে দেয়। যদি আপনি উপরের কোডটি লুপে চালনা করেন এবং মিলিসেকেন্ডগুলি প্রদর্শন করেন তবে এটি পরীক্ষা করা খুব সহজ।