2015-10-31 9 views
7
#!/usr/bin/perl 
use DateTime; 

$a = DateTime->new(year=>1952,month=>10,day=>21); 
$b = DateTime->new(year=>2015,month=>10,day=>31); 

$dif = $b-$a; 

print $dif->years() ." ". $dif->months() ." ". $dif->days(); 
# result: 63 0 3 

यह कहाँ से 3 दिन प्राप्त करता है? मेरी उम्मीद 63 0 10.यह perl डेटटाइम गणित अप्रत्याशित परिणाम क्यों उत्पन्न करता है?

#!/usr/bin/perl 
use DateTime; 

$a = DateTime->new(year=>1952,month=>11,day=>1); 
$b = DateTime->new(year=>2015,month=>10,day=>31); 

$dif = $b-$a; 

print $dif->years() ." ". $dif->months() ." ". $dif->days(); 
# result 62 11 2 

इस के लिए मेरी उम्मीद 62 11 31 या उससे भी अधिक है।

मैं उम्र गणित को जन्म के कुछ बुनियादी तारीख करने के लिए कोशिश कर रहा हूँ। महीने और साल काम करने लगते हैं जैसा कि मैं उम्मीद करता हूं लेकिन दिन अप्रत्याशित लगता है। मैंने सीपीएएन दस्तावेज पढ़ा है लेकिन मुझे अभी भी समझ में नहीं आता है।

+6

विषय से बाहर निकलें: यह बेहतर है कि वे एक और $ बी के चर का उपयोग न करें, cuz वे – red0ct

उत्तर

11

$dif->years, $diff->months और विशेष रूप से $diff->days में आप क्या उम्मीद नहीं करते हैं। DateTime::Duration documentation ...

से ये तरीक़े बड़ी इकाईयों में रूपांतरण किया होने के बाद दिया इकाई वस्तु का प्रतिनिधित्व करता है, में से कितने का संकेत संख्या लौटने। उदाहरण के लिए, दिन पहले सप्ताहों में परिवर्तित हो जाते हैं, और शेष शेष लौटा दिया गया है। ये संख्या हमेशा सकारात्मक होती है।

यहां प्रत्येक विधि देता है:

$dur->years()  == abs($dur->in_units('years')) 
$dur->months()  == abs(($dur->in_units('months', 'years'))[0]) 
$dur->weeks()  == abs($dur->in_units('weeks')) 
$dur->days()  == abs(($dur->in_units('days', 'weeks'))[0]) 

आप इस संशय है, तो मैं

तुम क्या चाहते in_units है करते हैं।

# 63 0 10 
say join " ", $dif->in_units('years', 'months', 'days'); 
+1

पर विशेष हैं। तो पैकेज में डिफ़ॉल्ट धारणा यह है कि हफ्तों की संख्या ब्याज की है। दिनों के लिए डिफ़ॉल्ट परिणाम सामान्य रूप से अपेक्षित होने वाले 'मोड 7'' होते हैं। –

+1

उत्कृष्ट जवाब। मैं वास्तव में प्रासंगिक दस्तावेज को बोल्ड करने की भी सराहना करता हूं। –

+0

@ जेफी हाँ, डेटटाइम निश्चित लंबाई इकाइयों को पसंद करता है। डेट गणित के मुद्दे [कैसे डेटटाइम मैथ वर्क्स] (https://metacpan.org/pod/DateTime#Datetime-Subtraction) में शामिल हैं। कैलेंडर गणित जटिल है। – Schwern

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