2013-03-28 8 views
9

के बीच अंतर ढूंढता है मैं दो डेटाटाइम के बीच अंतर प्राप्त करने और इसे डेटाटाइम के रूप में वापस करने की कोशिश कर रहा हूं। मुझे diff का उपयोग करके उदाहरण मिल गए हैं लेकिन मुझे यह सही नहीं लगता है।PHP दो डेटाटाइम

$timein = date("Y-m-d H:i:s"); 
$timeout = date("Y-m-d 20:00:00"); 
$totaltime = $timein->diff($timeout); 

हालांकि $ totaltime लॉग मेरी DB करने के लिए "0000-00-00 00:00:00"। क्या ऐसा इसलिए है क्योंकि मैं अपने टोटलटाइम वैरिएबल को स्वरूपित नहीं कर रहा हूं?

+0

दिनांक() आपको स्ट्रिंग देता है। आप तारों के साथ मतभेदों की गणना नहीं कर सकते हैं। – Misch

उत्तर

35

मुझे यकीन है कि कौन-सा प्रारूप अपने अंतर में लिए देख रहे हैं नहीं कर रहा हूँ, लेकिन यहाँ कैसे दिनांक समय

$datetime1 = new DateTime(); 
$datetime2 = new DateTime('2011-01-03 17:13:00'); 
$interval = $datetime1->diff($datetime2); 
$elapsed = $interval->format('%y years %m months %a days %h hours %i minutes %s seconds'); 
echo $elapsed; 
+0

त्रुटि फेंकता है "घातक त्रुटि: अपरिभाषित विधि पर कॉल करें डेटटाइम :: diff()" – Staleyr

+0

PHP का कौन सा संस्करण चल रहा है? –

+0

5.4, netbeans में – Staleyr

1

का उपयोग कर आप बस अंतर की गणना के लिए datetime यदि अंतर और स्वरूप का उपयोग कर सकते हैं यह करने के लिए है।

<?php 
$datetime1 = new DateTime('2009-10-11 12:12:00'); 
$datetime2 = new DateTime('2009-10-13 10:12:00'); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%Y-%m-%d %H:%i:%s'); 
?> 

DATETIME प्रारूप की अधिक जानकारी के लिए देखें: here
आप रास्ते में अंतराल प्रारूप बदल सकते हैं, आप चाहते हैं।

Here काम कर उदाहरण

पी.एस. है इन सुविधाओं ( diff() और format())> = पीएचपी के साथ काम 5.3.0 केवल

+1

कोडपैड लिंक टूटा हुआ है – pal4life

+0

डाउनवोट।यह ओपी द्वारा अनुरोधित प्रारूप में परिणाम प्रदान नहीं करता है। – mickmackusa

-1
<?php 
$val1 = '2014-04-10 11:34:09'; 
$val2 = '2015-04-10 10:56:15'; 
$result1 = (explode(' ', $val1)) ; 
$result2 = (explode(' ', $val2)) ; 
$date1= new DateTime($result1[0]); 
$date2=new DateTime($result2[0]); 
$diffdate=date_diff($date1,$date2); 
$difftime = strtotime($result1[1]) - strtotime($result2[1]); 
$dates=$diffdate->format("%R%a days"); 
echo $dates; 
echo $difftime; 
?> 
+0

हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, [स्पष्टीकरण समेत] (http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answer) कोड से बाहर वास्तव में सुधार करने में मदद करता है आपकी पोस्ट की गुणवत्ता। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। स्पष्टीकरण टिप्पणियों के साथ अपने कोड को भीड़ न करने का प्रयास करें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है! – Rizier123

+0

कोडटाइम –

+1

डाउनवोट के बीच अंतर खोजने के लिए कोड। यह हालिया उत्तर वर्तमान में स्वीकृत उत्तर से बेहतर नहीं है और उत्तर में कोई स्पष्टीकरण प्रदान नहीं करता है। यह परिणाम प्रदान नहीं करता है कि सवाल पूछता है। यह एक निम्न योग्यता वाला उत्तर है और इसे संपादित या निकालने की आवश्यकता है। – mickmackusa

-1
<?php 
$value='20140203113405'; 
$val='20150203113410'; 

$val1=str_split($val,2); 
$dateval1=$val1[0].$val1[1]."-".$val1[2]."-".$val1[3]; 
$timeval1=$val1[4].":".$val1[5].":".$val1[6]; 

$val2=str_split($value,2); 
$dateval2=$val2[0].$val2[1]."-".$val2[2]."-".$val2[3]; 
$timeval2=$val2[4].":".$val2[5].":".$val2[6]; 

$date1=new DateTime($dateval1); 
$date2=new DateTime($dateval2); 
$diffdate=date_diff($date1,$date2); 
$dates=$diffdate->format("%a days"); 
$difftime = strtotime($timeval1) - strtotime($timeval2); 
echo $dates; 
echo $difftime."seconds"; 
?> 
+2

जबकि यह कोड स्निपेट प्रश्न को हल कर सकता है, [स्पष्टीकरण समेत] (http://meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answer) कोड से बाहर वास्तव में सुधार करने में मदद करता है आपकी पोस्ट की गुणवत्ता। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। स्पष्टीकरण टिप्पणियों के साथ अपने कोड को भीड़ न करने का प्रयास करें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है! – Rizier123

+0

iam इस प्रारूप में डेटाटाइम का अंतर पाने की कोशिश कर रहा है –

+0

डाउनवोट। यह हालिया उत्तर वर्तमान में स्वीकृत उत्तर से बेहतर नहीं है और उत्तर में कोई स्पष्टीकरण प्रदान नहीं करता है। यह परिणाम प्रदान नहीं करता है कि सवाल पूछता है। यह एक निम्न योग्यता वाला उत्तर है और इसे संपादित या निकालने की आवश्यकता है। कई कम गुणवत्ता वाले उत्तरों वाले पृष्ठ को कूड़ेदान के बजाय, केवल एक ही उत्तर पोस्ट करें (अपना सर्वश्रेष्ठ) और शेष को हटा दें। – mickmackusa

0

जॉन कोंडे ने अपनी इस विधि में सब ठीक प्रक्रियाओं करता है लेकिन अपने प्रश्न का अंतिम चरण है जो करने के लिए है संतुष्ट नहीं करता अपने विनिर्देशों के परिणाम स्वरूपित करें।

इस कोड (Demo), कच्चे अंतर प्रदर्शित करेगा तुरंत कच्चे अंतर फ़ॉर्मेट करने के लिए कोशिश कर रहा है के साथ परेशानी का पर्दाफाश मेरी तैयारी चरणों प्रदर्शित करते हैं, और अंत में सही ढंग से प्रारूपित परिणाम प्रस्तुत करते हैं:

$datetime1 = new DateTime('2017-04-26 18:13:06'); 
$datetime2 = new DateTime('2011-01-17 17:13:00'); // change the millenium to see output difference 
$diff = $datetime1->diff($datetime2); 

// this will get you very close, but it will not pad the digits to conform with your expected format 
echo "Raw Difference: ",$diff->format('%y years %m months %d days %h hours %i minutes %s seconds'),"\n"; 

// Notice the impact when you change $datetime2's millenium from '1' to '2' 
echo "Invalid format: ",$diff->format('%Y-%m-%d %H:%i:%s'),"\n"; // only H does it right 

$details=array_intersect_key((array)$diff,array_flip(['y','m','d','h','i','s'])); 

echo '$detail array: '; 
var_export($details); 
echo "\n"; 

array_map(function($v,$k) 
    use(&$r) 
    { 
     $r.=($k=='y'?str_pad($v,4,"0",STR_PAD_LEFT):str_pad($v,2,"0",STR_PAD_LEFT)); 
     if($k=='y' || $k=='m'){$r.="-";} 
     elseif($k=='d'){$r.=" ";} 
     elseif($k=='h' || $k=='i'){$r.=":";} 
    },$details,array_keys($details) 
); 
echo "Valid format: ",$r; // now all components of datetime are properly padded 

आउटपुट:

Raw Difference: 6 years 3 months 9 days 1 hours 0 minutes 6 seconds 
Invalid format: 06-3-9 01:0:6 
$detail array: array (
    'y' => 6, 
    'm' => 3, 
    'd' => 9, 
    'h' => 1, 
    'i' => 0, 
    's' => 6, 
) 
Valid format: 0006-03-09 01:00:06 

अब मेरी datetime मूल्य तैयारी समझाने के लिए:

$details वें लेता है ई diff object और इसे एक सरणी के रूप में रखता है। array_flip(['y','m','d','h','i','s']) कुंजी की एक सरणी बनाता है जिसका उपयोग (array)$diff से array_intersect_key() का उपयोग करके सभी अप्रासंगिक कुंजी को निकालने के लिए किया जाएगा।

फिर $details में array_map() मेरी विधि दोहराता प्रत्येक मान और कुंजी का उपयोग कर, 0 के साथ उचित लंबाई के लिए अपनी बाईं ओर पैड, और आवश्यक विभाजक के साथ $r (परिणाम) स्ट्रिंग का अनुरोध किया datetime प्रारूप के अनुरूप कोनकैटेनेट्स किया गया।

संबंधित मुद्दे