दिलचस्प पोस्ट
एंड्रॉइड जेपीजी या पीएनजी को देखने के लिए बचाओ बिटमैप के निर्देशांक में छवि दृश्य के निर्देशांक को कैसे परिवर्तित करें? मैं ऐप पूल को कैसे क्रैश कर सकता हूं? अनुरोध के आईपी प्राप्त करने का सही तरीका क्या है PowerShell में एमडी 5 चेकसम कैसे प्राप्त करें I कंपाइलर त्रुटि: अस्पष्ट कॉल करने के लिए संदर्भ नियमित अभिव्यक्ति के संदर्भ में 'आलसी' और 'लालची' का क्या अर्थ है? स्थानीय फ़ाइलों को पढ़ने के लिए AJAX का उपयोग करना एंड्रॉइड / जावा – दिनों के दिनों में फ़र्क पोस्ट json शब्दकोश सदिश के तत्वों के सभी संभावित संयोजनों की सूची उत्पन्न करें DOMSubtreemodified घटना DOM स्तर 3 में पदावनत क्यों है? एक्सटेंशन विधि और गतिशील ऑब्जेक्ट क्या जावा में बफर ओवरफ्लो है? विज़ुअल स्टूडियो में एक बार दो परियोजनाएं चलाना

दिन, घंटे, मिनट और सेकंड में सेकंड कन्वर्ट करें

मैं एक वेरिएबल $uptime को परिवर्तित करना चाहूंगा जो सेकेंड है, दिन, घंटे, मिनट और सेकंड में।

उदाहरण:

 $uptime = 1640467; 

परिणाम होना चाहिए:

 18 days 23 hours 41 minutes 

वेब के समाधान से एकत्रित समाधान "दिन, घंटे, मिनट और सेकंड में सेकंड कन्वर्ट करें"

इसे DateTime क्लास के साथ हासिल किया जा सकता है

उपयोग:

 echo secondsToTime(1640467); # 18 days, 23 hours, 41 minutes and 7 seconds 

समारोह:

 function secondsToTime($seconds) { $dtF = new \DateTime('@0'); $dtT = new \DateTime("@$seconds"); return $dtF->diff($dtT)->format('%a days, %h hours, %i minutes and %s seconds'); } 

डेमो

दिनों को शामिल करने के लिए यह फ़ंक्शन को फिर से लिखा गया है। मैंने कोड को आसान समझने के लिए चर नामों को भी बदल दिया …

 /** * Convert number of seconds into hours, minutes and seconds * and return an array containing those values * * @param integer $inputSeconds Number of seconds to parse * @return array */ function secondsToTime($inputSeconds) { $secondsInAMinute = 60; $secondsInAnHour = 60 * $secondsInAMinute; $secondsInADay = 24 * $secondsInAnHour; // extract days $days = floor($inputSeconds / $secondsInADay); // extract hours $hourSeconds = $inputSeconds % $secondsInADay; $hours = floor($hourSeconds / $secondsInAnHour); // extract minutes $minuteSeconds = $hourSeconds % $secondsInAnHour; $minutes = floor($minuteSeconds / $secondsInAMinute); // extract the remaining seconds $remainingSeconds = $minuteSeconds % $secondsInAMinute; $seconds = ceil($remainingSeconds); // return the final array $obj = array( 'd' => (int) $days, 'h' => (int) $hours, 'm' => (int) $minutes, 's' => (int) $seconds, ); return $obj; } 

स्रोत: कोडएड () – http://codeaid.net/php/convert-seconds-to-hours-minutes-and-seconds-(php)

यहां यह एक साधारण 8-लाइन PHP फ़ंक्शन है जो कई सेकंड्स को मानव पठनीय स्ट्रिंग में परिवर्तित करता है जिसमें बड़ी मात्रा में सेकंड्स की संख्या शामिल है:

PHP फ़ंक्शन सेकंड 2 ह्यूमन ()

जूलियन मोरेनो के उत्तर के आधार पर, लेकिन एक स्ट्रिंग (कोई सरणी नहीं) के रूप में प्रतिक्रिया देने के लिए बदल दिया गया, केवल समय अंतराल की आवश्यकता होती है और बहुवचन नहीं मानती है

इस और सबसे ज्यादा वोट वाले उत्तर में अंतर है:

259264 सेकंड के लिए, यह कोड देना होगा

3 दिन, 1 मिनट, 4 सेकंड

259264 सेकेंड के लिए, सबसे ज्यादा मतदान का जवाब (ग्लैविक द्वारा) देगा

3 दिन, 0 घंटे , 1 मिनट और 4 सेकंड

 function secondsToTime($inputSeconds) { $secondsInAMinute = 60; $secondsInAnHour = 60 * $secondsInAMinute; $secondsInADay = 24 * $secondsInAnHour; // Extract days $days = floor($inputSeconds / $secondsInADay); // Extract hours $hourSeconds = $inputSeconds % $secondsInADay; $hours = floor($hourSeconds / $secondsInAnHour); // Extract minutes $minuteSeconds = $hourSeconds % $secondsInAnHour; $minutes = floor($minuteSeconds / $secondsInAMinute); // Extract the remaining seconds $remainingSeconds = $minuteSeconds % $secondsInAMinute; $seconds = ceil($remainingSeconds); // Format and return $timeParts = []; $sections = [ 'day' => (int)$days, 'hour' => (int)$hours, 'minute' => (int)$minutes, 'second' => (int)$seconds, ]; foreach ($sections as $name => $value){ if ($value > 0){ $timeParts[] = $value. ' '.$name.($value == 1 ? '' : 's'); } } return implode(', ', $timeParts); } 

मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

 gmdate("d H:i:s",1640467); 

परिणाम 1 9 23:41:07 होगा। जब यह सामान्य दिन से सिर्फ एक सेकंड ज्यादा होता है, तो यह 1 दिन के लिए दिन का मूल्य बढ़ रहा है। यही कारण है कि यह दिखाता है 19. आप अपनी आवश्यकताओं के लिए परिणाम विस्फोट कर सकते हैं और इसे ठीक कर सकते हैं।

हालांकि यह काफी पुराना सवाल है – कोई भी ये उपयोगी पा सकता है (उपवास नहीं लिखा हुआ है):

 function d_h_m_s__string1($seconds) { $ret = ''; $divs = array(86400, 3600, 60, 1); for ($d = 0; $d < 4; $d++) { $q = (int)($seconds / $divs[$d]); $r = $seconds % $divs[$d]; $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1)); $seconds = $r; } return $ret; } function d_h_m_s__string2($seconds) { if ($seconds == 0) return '0s'; $can_print = false; // to skip 0d, 0d0m .... $ret = ''; $divs = array(86400, 3600, 60, 1); for ($d = 0; $d < 4; $d++) { $q = (int)($seconds / $divs[$d]); $r = $seconds % $divs[$d]; if ($q != 0) $can_print = true; if ($can_print) $ret .= sprintf("%d%s", $q, substr('dhms', $d, 1)); $seconds = $r; } return $ret; } function d_h_m_s__array($seconds) { $ret = array(); $divs = array(86400, 3600, 60, 1); for ($d = 0; $d < 4; $d++) { $q = $seconds / $divs[$d]; $r = $seconds % $divs[$d]; $ret[substr('dhms', $d, 1)] = $q; $seconds = $r; } return $ret; } echo d_h_m_s__string1(0*86400+21*3600+57*60+13) . "\n"; echo d_h_m_s__string2(0*86400+21*3600+57*60+13) . "\n"; $ret = d_h_m_s__array(9*86400+21*3600+57*60+13); printf("%dd%dh%dm%ds\n", $ret['d'], $ret['h'], $ret['m'], $ret['s']); 

परिणाम:

 0d21h57m13s 21h57m13s 9d21h57m13s 

सरल तरीका एक ऐसा तरीका तैयार करना होगा जो वर्तमान समय $ $ से अब $ सेकंड में सापेक्ष समय की दिनांकटाइम :: अंतर से दिनांकित दिनांक देता है जो आप तब चेन और प्रारूप कर सकते हैं। उदाहरण के लिए:-

 public function toDateInterval($seconds) { return date_create('@' . (($now = time()) + $seconds))->diff(date_create('@' . $now)); } 

अब आपके विधि को दिनांकइनलाइन :: प्रारूप में कॉल करें

 echo $this->toDateInterval(1640467)->format('%a days %h hours %i minutes')); 

परिणाम:

 18 days 23 hours 41 minutes 
 function seconds_to_time($seconds){ // extract hours $hours = floor($seconds / (60 * 60)); // extract minutes $divisor_for_minutes = $seconds % (60 * 60); $minutes = floor($divisor_for_minutes / 60); // extract the remaining seconds $divisor_for_seconds = $divisor_for_minutes % 60; $seconds = ceil($divisor_for_seconds); //create string HH:MM:SS $ret = $hours.":".$minutes.":".$seconds; return($ret); } 

ग्लैविक के उत्कृष्ट समाधान का एक विस्तारित संस्करण, पूर्णांक सत्यापन के साथ, 1 एस समस्या को सुलझाना, और वर्षों और महीनों के लिए अतिरिक्त समर्थन, कम मानव कंप्यूटर के अनुकूल होने के पक्ष में दोस्ताना पार्स होने के खर्च पर अतिरिक्त सहायता:

 <?php function secondsToHumanReadable(/*int*/ $seconds)/*: string*/ { //if you dont need php5 support, just remove the is_int check and make the input argument type int. if(!\is_int($seconds)){ throw new \InvalidArgumentException('Argument 1 passed to secondsToHumanReadable() must be of the type int, '.\gettype($seconds).' given'); } $dtF = new \DateTime ( '@0' ); $dtT = new \DateTime ( "@$seconds" ); $ret = ''; if ($seconds === 0) { // special case return '0 seconds'; } $diff = $dtF->diff ( $dtT ); foreach ( array ( 'y' => 'year', 'm' => 'month', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second' ) as $time => $timename ) { if ($diff->$time !== 0) { $ret .= $diff->$time . ' ' . $timename; if ($diff->$time !== 1 && $diff->$time !== -1 ) { $ret .= 's'; } $ret .= ' '; } } return substr ( $ret, 0, - 1 ); } 

var_dump(secondsToHumanReadable(1*60*60*2+1)); -> string(16) "2 hours 1 second"

लघु, सरल, विश्वसनीय:

 function secondsToDHMS($seconds) { $s = (int)$seconds; return sprintf('%d:%02d:%02d:%02d', $s/86400, $s/3600%24, $s/60%60, $s%60); } 

समाधान जो 0 मूल्यों को बाहर करना चाहिए और सही एकवचन / बहुवचन मान सेट करना चाहिए

 use DateInterval; use DateTime; class TimeIntervalFormatter { public static function fromSeconds($seconds) { $seconds = (int)$seconds; $dateTime = new DateTime(); $dateTime->sub(new DateInterval("PT{$seconds}S")); $interval = (new DateTime())->diff($dateTime); $pieces = explode(' ', $interval->format('%y %m %d %h %i %s')); $intervals = ['year', 'month', 'day', 'hour', 'minute', 'second']; $result = []; foreach ($pieces as $i => $value) { if (!$value) { continue; } $periodName = $intervals[$i]; if ($value > 1) { $periodName .= 's'; } $result[] = "{$value} {$periodName}"; } return implode(', ', $result); } } 

यहाँ कुछ कोड है जिसे मैं दो तिथियों के बीच की अवधि प्राप्त करने के उद्देश्य के लिए उपयोग करना चाहता हूं। यह दो तिथियां स्वीकार करता है और आपको एक अच्छा सजा संरचित उत्तर देता है।

यह यहां मिले कोड का थोड़ा संशोधित संस्करण है ।

 <?php function dateDiff($time1, $time2, $precision = 6, $offset = false) { // If not numeric then convert texts to unix timestamps if (!is_int($time1)) { $time1 = strtotime($time1); } if (!is_int($time2)) { if (!$offset) { $time2 = strtotime($time2); } else { $time2 = strtotime($time2) - $offset; } } // If time1 is bigger than time2 // Then swap time1 and time2 if ($time1 > $time2) { $ttime = $time1; $time1 = $time2; $time2 = $ttime; } // Set up intervals and diffs arrays $intervals = array( 'year', 'month', 'day', 'hour', 'minute', 'second' ); $diffs = array(); // Loop thru all intervals foreach($intervals as $interval) { // Create temp time from time1 and interval $ttime = strtotime('+1 ' . $interval, $time1); // Set initial values $add = 1; $looped = 0; // Loop until temp time is smaller than time2 while ($time2 >= $ttime) { // Create new temp time from time1 and interval $add++; $ttime = strtotime("+" . $add . " " . $interval, $time1); $looped++; } $time1 = strtotime("+" . $looped . " " . $interval, $time1); $diffs[$interval] = $looped; } $count = 0; $times = array(); // Loop thru all diffs foreach($diffs as $interval => $value) { // Break if we have needed precission if ($count >= $precision) { break; } // Add value and interval // if value is bigger than 0 if ($value > 0) { // Add s if value is not 1 if ($value != 1) { $interval.= "s"; } // Add value and interval to times array $times[] = $value . " " . $interval; $count++; } } if (!empty($times)) { // Return string with times return implode(", ", $times); } else { // Return 0 Seconds } return '0 Seconds'; } 

स्रोत: https://gist.github.com/ozh/8169202

सभी एक समाधान में शून्य के साथ कोई इकाई नहीं देता क्या आप केवल निर्दिष्ट इकाइयों की संख्या (डिफ़ॉल्ट रूप से 3) का उत्पादन करेंगे। काफी लंबे, शायद बहुत खूबसूरत नहीं परिभाषाएं वैकल्पिक हैं, लेकिन एक बड़ी परियोजना में काम में आ सकती हैं

 define('OneMonth', 2592000); define('OneWeek', 604800); define('OneDay', 86400); define('OneHour', 3600); define('OneMinute', 60); function SecondsToTime($seconds, $num_units=3) { $time_descr = array( "months" => floor($seconds / OneMonth), "weeks" => floor(($seconds%OneMonth) / OneWeek), "days" => floor(($seconds%OneWeek) / OneDay), "hours" => floor(($seconds%OneDay) / OneHour), "mins" => floor(($seconds%OneHour) / OneMinute), "secs" => floor($seconds%OneMinute), ); $res = ""; $counter = 0; foreach ($time_descr as $k => $v) { if ($v) { $res.=$v." ".$k; $counter++; if($counter>=$num_units) break; elseif($counter) $res.=", "; } } return $res; } 

नीचे-वोट करने के लिए स्वतंत्र महसूस करें, लेकिन अपने कोड में इसे आज़माएं। यह सिर्फ हो सकता है कि आपको क्या चाहिए

मैंने लिखा अंतराल कक्षा का इस्तेमाल किया जा सकता है इसका इस्तेमाल विपरीत दिशा में भी किया जा सकता है

 composer require lubos/cakephp-interval $Interval = new \Interval\Interval\Interval(); // output 2w 6h echo $Interval->toHuman((2 * 5 * 8 + 6) * 3600); // output 36000 echo $Interval->toSeconds('1d 2h'); 

यहां अधिक जानकारी https://github.com/LubosRemplik/CakePHP-Interval

यह एक फ़ंक्शन है जो मैंने आपके प्रश्न से संबंधित दूसरे से तारीख को बदलने के लिए अतीत में इस्तेमाल किया था, मेरी प्रिंसिपी को उत्पाद का समय समाप्त होने तक कितने दिन, घंटे और सेकंड शेष रह गए हैं:

 $expirationDate = strtotime("2015-01-12 20:08:23"); $toDay = strtotime(date('Ymd H:i:s')); $difference = abs($toDay - $expirationDate); $days = floor($difference / 86400); $hours = floor(($difference - $days * 86400) / 3600); $minutes = floor(($difference - $days * 86400 - $hours * 3600) / 60); $seconds = floor($difference - $days * 86400 - $hours * 3600 - $minutes * 60); echo "{$days} days {$hours} hours {$minutes} minutes {$seconds} seconds";