जवाबों:
संक्षिप्त उत्तर है:
$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
कि एक पूर्णांक के रूप में microseconds भाग देता है।
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 चला रहे हैं तो निरंतर PHP_INT_SIZE
बराबर है8
]
यदि आप time()
मिलीसेकंड में एक समतुल्य कार्य चाहते हैं, तो आपको पहले यह विचार करना होगा कि time()
"एपोक समय" (01/01/1970) के बाद समाप्त हुए सेकंड की संख्या के रूप में , "एपिसोड समय" के बाद से मिलीसेकंड की संख्या एक बड़ी संख्या है। और एक 32 बिट पूर्णांक में फिट नहीं है।
PHP में पूर्णांक का आकार प्लेटफॉर्म के आधार पर 32 या 64 बिट्स हो सकता है।
से http://php.net/manual/en/language.types.integer.php
एक पूर्णांक का आकार प्लेटफ़ॉर्म-निर्भर है, हालांकि लगभग दो बिलियन का अधिकतम मूल्य सामान्य मूल्य है (जो कि 32 बिट्स पर हस्ताक्षर किया गया है)। 64-बिट प्लेटफ़ॉर्म में आमतौर पर विंडोज को छोड़कर, लगभग 9E18 का अधिकतम मूल्य होता है, जो हमेशा 32 बिट होता है। PHP अहस्ताक्षरित पूर्णांक का समर्थन नहीं करता है। पूर्णांक आकार को निरंतर PHP_INT_SIZE, और PHP 4.4.0 और PHP 5.0.5 के बाद से निरंतर 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 दशमलव से गुणा और जोड़ा जाता है
1409263371904
ध्यान दें कि दोनों $mt[1]
और परिणाम के round
लिए डाली जाती हैं int
। यह आवश्यक है क्योंकि वे float
एस हैं और उन पर बिना कास्टिंग के ऑपरेशन के परिणामस्वरूप फ़ंक्शन वापस आ जाएगा float
।
अंत में, यह फंक्शन की तुलना में थोड़ा अधिक सटीक है
round(microtime(true)*1000);
1:10 के अनुपात के साथ (लगभग) सही परिणाम की तुलना में 1 अधिक मिलीसेकंड देता है। यह फ्लोट के प्रकार की सीमित शुद्धता के कारण है ( microtime(true)
फ्लोट लौटाता है)। वैसे भी अगर आप अभी भी कम पसंद करते हैं तो round(microtime(true)*1000);
मैं int
परिणाम के लिए कास्टिंग करने का सुझाव दूंगा ।
यहां तक कि अगर यह प्रश्न के दायरे से परे है, तो यह ध्यान देने योग्य है कि यदि आपका प्लेटफ़ॉर्म 64 बिट पूर्णांक का समर्थन करता है, तो आप अतिप्रवाह में बिना आवर्ती के भी माइक्रोसेकंड में वर्तमान समय प्राप्त कर सकते हैं ।
यदि वास्तव में 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()
टाइमस्टैम्प पर मिलीसेकंड सटीक प्राप्त करने के लिए उपयोग कर सकते हैं ।
अपनी टिप्पणियों से, आप इसे एक उच्च-सटीक UNIX टाइमस्टैम्प के रूप में चाहते हैं। DateTime.Now.Ticks
.NET दुनिया में कुछ इस तरह ।
आप ऐसा करने के लिए निम्न फ़ंक्शन का उपयोग कर सकते हैं:
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)
PHP 5 या PHP 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-बिट PHP पर हैं तो भी यह काम करता है:
list($msec, $sec) = explode(' ', microtime());
$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'
ध्यान दें कि यह आपको पूर्णांक नहीं देता है, लेकिन तार। हालाँकि, यह कई मामलों में ठीक काम करता है, उदाहरण के लिए जब REST अनुरोधों के लिए URL का निर्माण करते हैं।
यदि आपको पूर्णांक की आवश्यकता है, तो 64-बिट PHP अनिवार्य है।
फिर आप उपरोक्त कोड का पुन: उपयोग कर सकते हैं और (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;
ध्यान दें: इस फ़ंक्शन के लिए microtime () के साथ सुधार के कारण PHP5 की आवश्यकता है और bc गणित मॉड्यूल की भी आवश्यकता है (जैसा कि हम बड़ी संख्या में काम कर रहे हैं, आप देख सकते हैं कि क्या आपके पास 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);
PHP 5.2.2 <
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.u"); // u : Microseconds
PHP 7.0.0 <7.1
$d = new DateTime();
echo $d->format("Y-m-d H:i:s.v"); // v : Milliseconds
time()
।microtime(true)
दूसरी ओर, वर्तमान समय को सेकंड में लौटाता है क्योंकि यूनिक्स की अवधि निकटतम माइक्रोसेकंड के लिए सटीक है (PHP संदर्भ देखें)। यदि आप उपरोक्त कोड को लूप में चलाते हैं और मिलीसेकंड प्रदर्शित करते हैं, तो वास्तव में परीक्षण करना बहुत आसान है।