2010-09-18 13 views
14

मैं इसके साथ जुड़े दिनांक के साथ डेटाबेस से एक प्रविष्टि पुनर्प्राप्त कर रहा हूं।PHP: अतीत में किसी विशिष्ट तिथि के पिछले रविवार को कैसे प्राप्त करें ..?

मैं एक jQuery डेटपिकर को पॉप्युलेट करने के लिए उस विशिष्ट तारीख के सापेक्ष पिछले रविवार और अगले शनिवार को प्राप्त करने में सक्षम होना चाहता हूं।

मुझे पता है कि वास्तविक समय/तारीख के साथ साथ यह करने के लिए:

strtotime('last Sunday') 

लेकिन मैं कैसे करना है कि अब के अलावा किसी अन्य तारीख के लिए नहीं पता ...

धन्यवाद।

उत्तर

42

से गणना करने के लिए "पिछले रविवार को" तारीख और अन्य रिश्तेदार दिनांक निर्दिष्ट करने के लिए strtotime का दूसरा तर्क का उपयोग करें:

strtotime('last Sunday', strtotime('09/01/2010')); 

http://us2.php.net/strtotime

उदाहरण:

echo date('m/d/Y', strtotime('last Sunday', strtotime('09/01/2010'))); 

आउटपुट:

08/29/2010 
+0

महान काम करता है।! धन्यवाद। – pnichols

+3

को [strtotime] (http://php.net/manual/en/function.strtotime.php) को दो बार कॉल करने की आवश्यकता नहीं है, इसे 'echo date (' m/d/y ', strtotime ("last' रविवार 09/01/2010 ")); –

17

आप ऐसा करने के लिए डेटाटाइम कक्षा का भी उपयोग कर सकते हैं। नीचे दिए गए कोड काम करेगा:

 
$date = new DateTime('09/01/2010'); 
$date->modify('last Sunday'); 
echo $date->format('d/m/Y'); 
Output: 29/08/2010 

http://ca2.php.net/manual/en/class.datetime.php पर एक नज़र डालें। कन्स्ट्रक्टर दो वैकल्पिक तर्क लेता है, जिनमें से पहला ऑब्जेक्ट के लिए दिनांक स्ट्रिंग है (अब डिफ़ॉल्ट है) और दूसरा डेटटाइमज़ोन ऑब्जेक्ट है (PHP.ini में सेट समय क्षेत्र में डिफ़ॉल्ट)। संशोधित विधि तब उसी अभिव्यक्ति का उपयोग करके तिथि को बदलती है जो strtotime() समर्थन और प्रारूप विधि दिनांक स्वरूप() के समान प्रारूप स्ट्रिंग का उपयोग करके दिनांक स्वरूपित करती है। मूल रूप से यह pygorex1 के उदाहरण के समान होता है लेकिन ऑब्जेक्ट उन्मुख वाक्यविन्यास का उपयोग करता है।

+0

ध्यान दें कि इसके लिए PHP 5.3 की आवश्यकता है। – alexn

+0

@alexn यह सच नहीं है। डेटाटाइम कक्षा PHP 5.2 से आगे उपलब्ध है। PHP 5.3 में कुछ अतिरिक्त विधियां उपलब्ध हैं (ऐड और सब दिमाग में आती हैं) लेकिन मेरे उदाहरण में उपयोग की जाने वाली सभी विधियां PHP 5.2.x में उपलब्ध हैं। – Jeremy

+0

दिलचस्प ... मुझे वास्तव में ओओ में देखना शुरू करना है। मुझे पता है कि यह अद्यतित रहने के लिए जरूरी है, लेकिन ओओ प्रोजेक्ट के प्रकार/आकार के लिए बहुत अधिक/अनावश्यक लगता है ... – pnichols

0

आप सप्ताह के ऑफसेट का उपयोग कर सकते हैं। मनमाना तारीख के लिए PHP में:

<?php 

define('SEC_IN_DAY', (24*60*60)); 

$d = strtotime('2013-04-15'); 
// "w" is the day of the week. 0 for Sunday through 6 for Saturday 
$delta_sun = -date('w', $d); 
$delta_sat = $delta_sun + 6; 

echo 'The day ' . date('Y-m-d H:i:s', $d) . "\n"; 
echo 'Last Sunday '. date('Y-m-d H:i:s', $d + $delta_sun * SEC_IN_DAY) . "\n"; 
echo 'Next Saturday '. date('Y-m-d H:i:s', $d + $delta_sat * SEC_IN_DAY) . "\n"; 

MySQL में एक ही:

SET @d := '2013-04-15'; 
SET @delta_sun := -DATE_FORMAT(@d, '%w'); 
SET @delta_sat := @delta_sun + 6; 

SELECT 'The day' AS `name`, DATE(@d) AS `date` 
    UNION ALL 
SELECT 'Last Sunday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sun DAY) AS `date` 
    UNION ALL 
SELECT 'Next Saturday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sat DAY) AS `date` 
+0

'SEC_IN_DAY' स्थिरता शायद थोड़ा सा व्यर्थ है। '86400' PHP में काफी सामान्य रूप से उपयोग और ज्ञात संख्या है, आप बस इसका उपयोग सीधे कर सकते हैं। – crmpicco

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