php - কিভাবে পিএইচপি মিলিসেকেন্ড বর্তমান সময় পেতে?



time milliseconds (8)

অন্যান্য যেমন বলেছে, আপনি টাইমস্ট্যাম্পগুলিতে মিলিসেকেন্ড স্পষ্টতা পেতে microtime() ব্যবহার করতে পারেন।

আপনার মন্তব্য থেকে, আপনি এটি একটি উচ্চ নির্ভুলতা ইউনিক্স টাইমস্ট্যাম্প হিসাবে চাই। DateTime.Now.Ticks নেট DateTime.Now.TicksDateTime.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);
}

https://src-bin.com

time() সেকেন্ডে হয় - মিলিসেকেন্ডে একটি আছে?


Answer #1

আপনি 32-বিট পিএইচপি থাকলেও এটি কাজ করে:

list($msec, $sec) = explode(' ', microtime());

$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'

নোট এই আপনি পূর্ণসংখ্যা দিতে না, কিন্তু স্ট্রিং। তবে এটি অনেক ক্ষেত্রে সূক্ষ্ম কাজ করে, উদাহরণস্বরূপ যখন REST অনুরোধগুলির জন্য URL তৈরি করে।


আপনি পূর্ণসংখ্যা প্রয়োজন হলে, 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

অথবা আপনি ভাল ol 'এক-liners ব্যবহার করতে পারেন:

$time_milli = (int) round(microtime(true) * 1000);    // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300

Answer #2

এটা ব্যবহার কর:

function get_millis(){
  list($usec, $sec) = explode(' ', microtime());
  return (int) ((int) $sec * 1000 + ((float) $usec * 1000));
}

বিদায়


Answer #3

পিএইচপি 5 তে microtime(true) ব্যবহার করুন, পিএইচপি 4 এ নিম্নলিখিত পরিবর্তন করুন:

array_sum(explode(' ', microtime()));

যে কোড লিখতে একটি পোর্টেবল উপায় হবে:

function getMicrotime()
{
    if (version_compare(PHP_VERSION, '5.0.0', '<'))
    {
        return array_sum(explode(' ', microtime()));
    }

    return microtime(true);
}

Answer #4

echo date('Ymd H:i:s.') . gettimeofday()['usec'];

আউটপুট:

2016-11-19 15:12:34.346351


Answer #5

সংক্ষিপ্ত উত্তর:

শুধুমাত্র 64 বিট প্ল্যাটফর্ম!

function milliseconds() {
    $mt = explode(' ', microtime());
    return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}

দীর্ঘ উত্তর:

যদি আপনি মিলিসেকেন্ডে time() এর সমান্তরাল ফাংশন চান তবে প্রথমে আপনাকে বিবেচনা করতে হবে যে time() "যুগ যুগ" (01/01/1970) থেকে প্রবাহিত সেকেন্ডের সংখ্যা প্রদান করে, "যুগ" থেকে মিলিসেকেন্ডের সংখ্যা সময় "একটি বড় সংখ্যা এবং একটি 32 বিট পূর্ণসংখ্যা মাপসই করা হয় না।

পিএইচপি একটি পূর্ণসংখ্যা আকার প্ল্যাটফর্ম উপর নির্ভর করে 32 বা 64 বিট হতে পারে।

http://php.net/manual/en/language.types.integer.php থেকে

একটি পূর্ণসংখ্যা আকার প্ল্যাটফর্ম নির্ভরশীল, যদিও প্রায় দুই বিলিয়ন সর্বোচ্চ মান হল স্বাভাবিক মান (এটি 32 বিট স্বাক্ষরিত)। উইন্ডোজ ব্যতীত 64-বিট প্ল্যাটফর্মগুলির প্রায় 9E18 এর সর্বোচ্চ মান রয়েছে, যা সর্বদা 32 বিট। পিএইচপি স্বাক্ষরিত পূর্ণসংখ্যা সমর্থন করে না। পিএইচপি 4.4.0 এবং পিএইচপি 5.0.5 থেকে ধ্রুব পিএইচপিএসT_এইচএক্স ব্যবহার করে ধ্রুবক পিএইচপিএসএসআইএসএসইজি, এবং সর্বোচ্চ মান ব্যবহার করে সংখ্যার আকার নির্ধারণ করা যেতে পারে।

যদি আপনার 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 দশমিক যোগ করে

1409263371904

উল্লেখ্য যে $mt[1] এবং round ফলাফল উভয় int নিক্ষিপ্ত হয়। এটি প্রয়োজনীয় কারণ এটি float গুলি এবং কাস্টিং ছাড়া তাদের ক্রিয়াকলাপ ফাংশন ফাংশন ফাংশন ফলে।

অবশেষে, যে ফাংশন তুলনায় সামান্য আরো সুনির্দিষ্ট

round(microtime(true)*1000);

যে 1:10 (আনুমানিক) অনুপাতের সাথে সঠিক ফলাফলের চেয়ে আরও 1 মিলিসেকেন্ড প্রদান করে। এটি ফ্লোট টাইপের সীমিত নির্ভুলতার কারণে ( microtime(true) একটি ফ্লোট প্রদান করে)। যাইহোক আপনি এখনও ছোট round(microtime(true)*1000); পছন্দ round(microtime(true)*1000); আমি ফলাফল int ঢালাই সুপারিশ করবে।

এমনকি যদি এটি প্রশ্নটির সীমার বাইরেও থাকে তবে এটি উল্লেখযোগ্য যে আপনার প্ল্যাটফর্মটি 64 বিট পূর্ণসংখ্যা সমর্থন করে তবে আপনি বর্তমান সময়টি অতিরিক্ত প্রবাহে ব্যতিরেকে মাইক্রোসেকেন্ডগুলিতেও পেতে পারেন।

যদি সত্য 2^63 (আনুমানিক সর্বাধিক স্বাক্ষরিত পূর্ণসংখ্যা) 10^6 * 3600 * 24 * 365 দ্বারা বিভক্ত (প্রায় এক বছরের মধ্যে মাইক্রোসেকেন্ড) প্রায় দেয়। 292471

echo PHP_INT_MAX / (1000000*3600*24*365); দ্বারা একই মান ফিরে এসেছে echo PHP_INT_MAX / (1000000*3600*24*365);

অন্য কথায়, একটি স্বাক্ষরিত পূর্ণসংখ্যাটিতে 200,000 বছরের বেশি সময় ধরে মাইক্রোসেকেন্ডে মাপা যায়।

আপনি তারপর হতে পারে

function microseconds() {
    $mt = explode(' ', microtime());
    return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}

Answer #6
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
    ($the_date_time->format('u') / 1000);

Answer #7
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;

দ্রষ্টব্য: মাইক্রোটাইম () এবং এর সাথে বিসি গণিত মডিউলটির উন্নতির কারণে এই ফাংশনের জন্য পিএইচপি 5 প্রয়োজন হয় (যেমন আমরা বড় সংখ্যা নিয়ে কাজ করছি, আপনি ফিনইনফোতে মডিউলটি দেখতে পারেন কিনা তা যাচাই করতে পারেন)।

এই আপনি সাহায্য আশা করি।





milliseconds