date -d "$death_date - $y years - $m months - $d days"
जन्म की तारीख (वंशावली के लिए) का उपयोग करते समय यह सामने आया । यह आदेश गलत है। महीने सभी समान लंबाई के नहीं हैं, इसलिए (date + offset) - offset != date
। आयु, वर्ष / माह / दिन में, जन्म की तारीख से आगे बढ़ने के उपाय हैं।
$ date --utc -d 'mar 28 1867 +72years +11months +2days'
Fri Mar 1 00:00:00 UTC 1940
$ date --utc -d 'mar 1 1940 -72years -11months -2days'
Sat Mar 30 00:00:00 UTC 1867
# (2 days later than our starting point)
दिनांक दोनों मामलों में सही आउटपुट देता है, लेकिन दूसरे मामले में आप गलत प्रश्न पूछ रहे थे। यह वर्ष के 11 महीनों के लिए +/- 11 कवर, दिन जोड़ने / घटाने से पहले मायने रखता है। उदाहरण के लिए:
$ date --utc -d 'mar 31 1939 -1month'
Fri Mar 3 00:00:00 UTC 1939
$ date --utc -d 'mar 31 1940 -1month' # leap year
Sat Mar 2 00:00:00 UTC 1940
$ date --utc -d 'jan 31 1940 +1month' # leap year
Sat Mar 2 00:00:00 UTC 1940
जोड़ने के उलटा ऑपरेशन होने के लिए घटने के लिए, संचालन के क्रम को उलट देना होगा। वर्ष जोड़ना, कुछ महीने, कुछ दिन। यदि घटाना विपरीत क्रम का उपयोग करता है, तो आप अपने शुरुआती बिंदु पर वापस आ जाएंगे। यह नहीं है, तो आप नहीं करते हैं, अगर दिन ऑफसेट एक महीने की सीमा को एक अलग लंबाई महीने में पार करता है।
यदि आपको अंतिम तिथि और आयु से पीछे की ओर काम करने की आवश्यकता है, तो आप इसे कई चालान के साथ कर सकते हैं date
। पहले दिन घटाओ, फिर महीने, फिर साल। (मुझे नहीं लगता कि एक ही date
मंगलाचरण में वर्षों और महीनों को जोड़ना सुरक्षित है , क्योंकि लीप वर्षों में फरवरी की लंबाई में बदलाव होता है।)