2011-11-11 10 views
5

के अंतिम दिन को वापस नहीं लौटा रहा था, मुझे उम्मीद है कि यह कार्यात्मक 7/1/2005 के बजाय 6/30/2005 लौटाएगा।php: strtotime ("12/31/2004 +6 महीने")); जून

print date("m/d/Y", strtotime("12/31/2004 +6 month")); 

इसी तरह, print date("m/d/Y", strtotime("1/31/2011 +1 month")) रिटर्न 03/03/2011 जबकि इसे पसंद 2/28/2011 वापस जाने के लिए होगा।

क्या किसी को पता है कि जोड़े गए महीने के अंतिम दिन को दिखाने का कोई सीधा तरीका है या नहीं?

+0

'स्ट्रेटोटाइम' यूरोपीय शैली की तिथियों के साथ काम करता है, अगर मुझे सही याद है। '31/1/2011' आदि का प्रयास करें –

उत्तर

6

इस बारे में कैसे?

echo date("m/d/Y", strtotime("last day of 12/31/2004 + 6 month")); // 6/30/2005 
echo date("m/d/Y", strtotime("last day of 1/31/2011 + 1 month")); // 2/28/2011 

Demo

संपादित करें: आपके संदर्भ के लिए, यहाँ documentation for relative times करने के लिए एक कड़ी है।

0

एक आसान तरीका वास्तव में आपके इच्छित दिन से एक महीने पहले जाना है और फिर दिन मान शून्य बनाना है। इसके अलावा, mktime() आसान हो सकता है

$mymonth = 2; // I want the last day of February 
echo date('m/d/Y', mktime(0,0,0,$mymonth+1,0,2011)); 

यह 2/28/2011 वापस आना चाहिए।

2

रूप strtotime अगले महीने के लिए जारी रखने के लिए अगर वहाँ नहीं है enoghe दिनों में उस महीने, आप 6 महीने लेने और जांच कर सकते हैं प्रारंभ दिनांक को अपने अंत तक

$date2 = date("Y-m-d", strtotime("{$date} +6 months")); 
    $date3 = date("Y-m-d", strtotime("{$date2} -6 months")); 
    if($date3 != $date) 
    { 
    $date2 = date("Y-m-t", strtotime("{$date2} -1 months")); 
    } 

(या अपने मामले में " एम/टी/वाई ")

0

स्ट्रेटोटाइम विरोधाभासी जानकारी के साथ सबसे अच्छा कर सकता है। कह रही है

1/31/2011 +1month 

2/31/2011 

को आगे बढ़ाने का मतलब होगा लेकिन फरवरी केवल 28 (कभी कभी 29) दिन है। 2011 एक छलांग वर्ष नहीं है, इसलिए "31 फरवरी" को "3 मार्च" को सामान्यीकृत किया जाता है।

यह '12/31/2004 + 6month 'के लिए लागू होता है। यह आपको 31 जून, 2005 को ले जाता है। लेकिन जून में केवल 30 दिन हैं, इसलिए तारीख को 1 जुलाई को सामान्यीकृत किया गया है।

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