मैं मिलिसेकंड से microseconds सहित एक स्वरूपित तारीख प्राप्त करने की कोशिश कर रहा हूं।
केवल एक ही समस्या है मैं 000000 प्राप्त कर रहा हूं
date("m-d-Y H:i:s.u", $milliseconds/1000);
पूर्व। 07-28-2013 11: 26: 14.000000
मैं मिलिसेकंड से microseconds सहित एक स्वरूपित तारीख प्राप्त करने की कोशिश कर रहा हूं।
केवल एक ही समस्या है मैं 000000 प्राप्त कर रहा हूं
date("m-d-Y H:i:s.u", $milliseconds/1000);
पूर्व। 07-28-2013 11: 26: 14.000000
जवाबों:
php.net का कहना है:
माइक्रोसेकंड (PHP 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 onds)।
Php.net से एक और उदाहरण :
$d2=new DateTime("2012-07-08 11:14:15.889342");
Php.netdateTime() पर संदर्भ
मैंने प्रश्न का उत्तर संक्षिप्त रूप में दिया है और लेखक को सरल करता हूं। कृपया लेखक को अधिक जानकारी के लिए देखें: दिनांक प्रारूप mdY H: i: मिलीसेकंड से
microtime(false)।)
2012-07-08 11:14:15.0.889342
आप इसे इनपुट प्रारूप के साथ आसानी से कर सकते हैं 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 मैनुअल पेज से:
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
DaVe के जवाब में समय ज़ोन पर एक नोट।
createFromFormat()यदि कोई निर्दिष्ट नहीं है तो आम तौर पर विधि स्थानीय समय क्षेत्र का उपयोग करेगी।
http://php.net/manual/en/datetime.createfromformat.php
हालाँकि, यहां वर्णित तकनीक डेटाइम ऑब्जेक्ट का उपयोग कर रही है, microtime()जिसके उपयोग से यूनिक्स एपोच (01 जनवरी 1970 00:00:00 GMT) के बाद से निकले सेकंड की संख्या वापस आ जाती है।
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हमेशा के लिए आवश्यक है, तब भी जब यह सटीक दूसरे पर नहीं है। अन्यथा आप precisionPHP कॉन्फ़िगरेशन विकल्प ("प्रदर्शन") की दया पर हैं , जो डिफ़ॉल्ट रूप से PHP 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
यदि आपको दशमलव स्थानों की संख्या को सीमित करने की आवश्यकता है, तो नीचे की रेखा (क्रेडिट 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
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()किसी कारण से जावास्क्रिप्ट की तरह एक तारीख बनाना चाहते हैं , तो आप इसे 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 ने दशमलव स्थानों को गोल किया, लेकिन इसने उन्हें दोनों ही मामलों में उसी तरह गोल किया।
date('Y-m-d\TH:i:s', $time / 1000) . sprintf('.%03dZ', substr($time, 10));?
$timeपहले से ही मिलीसेकंड में है, हाँ, तो यह तकनीकी रूप से काम करेगा। substrहैक से प्यार मत करो , लेकिन मुझे लगता है कि यह 2001 और 2286 के बीच की तारीखों के लिए काम करेगा।
$timeएमएस है, लेकिन 2286इसका क्या मतलब है, मैं ऐसा क्यों सोचता हूं और इस तरह से बचना कैसे संभव होगा?
यह 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");
PHP 7.1 के रूप में आप बस यह कर सकते हैं:
$date = new DateTime( "NOW" );
echo $date->format( "m-d-Y H:i:s.u" );
यह इस प्रकार प्रदर्शित होगा:
04-11-2018 10:54:01.321688
प्रलेखन निम्नलिखित कहता है:
माइक्रोसेकंड (PHP 5.2.2 में जोड़ा गया)। ध्यान दें कि दिनांक () हमेशा पूर्णांक पैरामीटर लेने के बाद ही 000000 उत्पन्न करेगा, जबकि DateTime :: format () microseconds का समर्थन करता है।
यानी, इसके बजाय डेटटाइम का उपयोग करें।
new DateTime()0000 भी वापस आएगा। लेकिन अगर आप इसे इंस्टेंट करते समय इसे माइक्रोसेकंड-सटीकता के समय के साथ प्रदान करते हैं, तो यह ठीक काम करता है।
new DateTime( 'Y-m-d H:i:s.'.$micro);
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'));
यह क्रम में निम्नलिखित है:
Date() तारीख को संभाल सके।DateTime()फिर आप उस समय क्षेत्र को संशोधित करने की अनुमति दे सकते हैं जिसमें आप हैं, लेकिन यह सुनिश्चित करें कि date_default_timezone_set("Timezone");आप DateTime()कार्यों और कक्षाओं का उपयोग करने से पहले सेट हैं।DateTime()कक्षाओं या कार्यों का उपयोग करते समय सही समय क्षेत्र में अपना सुनिश्चित करें ।यदि आप कार्बन का उपयोग कर रहे हैं, तो आप परिभाषित युक्ति "RFC3339_EXTENDED" का उपयोग कर सकते हैं। या इसे अनुकूलित करें।
Carbon::RFC3339_EXTENDED = 'Y-m-d\TH:i:s.vP';
@ArchCodeMonkey उत्तर के आधार पर।
यदि आपके पास है तो declare(strict_types=1)आपको स्ट्रिंग के लिए दूसरा तर्क देना होगा
मैंने कुछ अलग तरीके अपनाए:
1) माइक्रोटाइम + sscanf + दिनांक:
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) दिनांक समय :: createFromFormat + डेटाइम-> प्रारूप:
$now = new DateTime('NOW');
$date = $now->format('Y-m-d H:i:s.u');
PHP 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) microtime + number_format + DateTime :: createFromFormat + DateTime-> प्रारूप:
$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) माइक्रोटाइम + स्प्रिंटफ़ + डेटटाइम :: createFromFormat + DateTime-> प्रारूप:
$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)