2012-06-02 12 views
6

मेरे पास एक वेब शेड्यूलिंग ऐप है जिसे मैं वर्तमान में पुनर्लेखन कर रहा हूं और आवर्ती नियुक्तियों के साथ काम करने के बारे में कुछ प्रश्न हैं (मुझे पता है कि इसमें कोई कमी नहीं है " ऐसा करने का सबसे अच्छा तरीका "जब आवर्ती ऐप की बात आती है)।php - "हर दूसरे सप्ताह ट्यूज़डे" जैसे दिनांकों के साथ काम करना

तो मैं नियुक्तियों जहां उपयोगकर्ता शनि, 2 जून की तरह एक तिथि के लिए एक अपॉइंटमेंट तय कर सकते हैं आवर्ती प्रदान करना चाहते हैं, और यह कुछ पूर्व निर्धारित समय अवधि के लिए शनिवार को हर दूसरे हफ्ते दोहराने चाहिए (जैसे 1 साल)।

कौन से php फ़ंक्शन मुझे यह निर्धारित करने में सहायता कर सकते हैं कि "हर दूसरे शनिवार" किस तारीख पर पड़ता है? मैं स्पष्टीकरण के लिए अपने यूआई की तस्वीर संलग्न कर रहा हूं।

enter image description here

+1

'स्ट्रेटोटाइम ('अगला शनिवार') जैसी सामग्री आसान है, जब तक कि आप अधिक जटिल चीजें नहीं चाहते :) :) –

+0

तो क्या इसका उपयोग उपयोगकर्ता के लिए कैलेंडर में किया जा रहा है, जहां वे सक्रिय रूप से उनकी नियुक्ति के बारे में जानकारी लेते हैं क्या उन्हें एक अनुस्मारक की आवश्यकता है? या क्या उन्हें कुछ स्वचालित संदेश या ऐसा कुछ भेजने की ज़रूरत है? –

+0

हाय मैक्स, मेरा ऐप उपयोगकर्ताओं को अपॉइंटमेंट शेड्यूल करने देता है और फिर आगामी नियुक्ति के अपने ग्राहकों को अनुस्मारक भेजता है। इस मामले में, मैं उपयोगकर्ता को "शनिवार को हर दूसरे सप्ताह" (या कोई अन्य संयोजन जो मेरा यूआई बना सकता है) की नियुक्ति बुकिंग करने के लिए समायोजित करना चाहता है। मेरी चिंता यह थी कि सिर्फ 14 दिनों (इस मामले में) जोड़ना हमेशा यह नहीं होगा कि नियुक्ति शनिवार को गिर जाएगी। – Greg

उत्तर

14

व्यक्तिगत रूप से मैं DateTime वस्तुओं के साथ काम करना चाहता हूं और DateInterval कक्षा का उपयोग करना चाहता हूं।

अपने ऊपर मामले में, आप तो बस एक P2W दिनांक अंतराल

बुनियादी उदाहरण के साथ काम पहले/अगले शनिवार की तिथि बाहर काम करने की जरूरत है,

$dow = 'saturday'; 
$step = 2; 
$unit = 'W'; 

$start = new DateTime('2012-06-02'); 
$end = clone $start; 

$start->modify($dow); // Move to first occurence 
$end->add(new DateInterval('P1Y')); // Move to 1 year from start 

$interval = new DateInterval("P{$step}{$unit}"); 
$period = new DatePeriod($start, $interval, $end); 

foreach ($period as $date) { 
    echo $date->format('D, d M Y'), PHP_EOL; 
} 

/* 
Sat, 02 Jun 2012 
Sat, 16 Jun 2012 
Sat, 30 Jun 2012 
Sat, 14 Jul 2012 
… 
Sat, 20 Apr 2013 
Sat, 04 May 2013 
Sat, 18 May 2013 
Sat, 01 Jun 2013 
*/ 
+0

उदाहरण जोड़ने के लिए धन्यवाद –

+0

मुझे लगता है कि यह वही है जो मैं ढूंढ रहा हूं! धन्यवाद मार्क। मैं इसे सुबह में आज़मा दूंगा, इनपुट की बहुत सराहना की जा रही है! – Greg

+0

हाय मार्क, ऐसा लगता है कि आपके द्वारा उपयोग किए जाने वाले कुछ वर्ग केवल php 5.3.x (DatePeriod, DateInterval) में उपलब्ध हैं। दुर्भाग्य से मैंने आज सुबह अपने सर्वर को अपग्रेड करने का प्रयास किया और यह जूमला साइट्स का एक गुच्छा बोर कर रहा था, इसलिए मुझे 5.2.9 पर वापस जाना पड़ा। क्या 5.2.9 कार्यक्षमता के कुछ स्वाद का उपयोग करके आपके समाधान के लिए एक समान दृष्टिकोण है? – Greg

0

ठीक है, मैं पहले एक आरंभ तिथि निर्धारित होता; जब वह दिन आया है तो आप बस करें:

$next_date = strtotime('+2 weeks'); 

यह आपको उसी दिन मिल जाता है, लेकिन केवल दो सप्ताह बाद। और चक्र जारी है :)

0

आप एक का उपयोग कर सकते सेकंड्स में अपना समय स्टोर करने के लिए डेटाबेस कॉलम:

UPDATE appointments SET dtime=UNIX_TIMESTAMP() WHERE id=5 

फिर, आप यह मान देख सकते हैं कि कोई विशिष्ट अवधि अभी आ गई है/पास हो गई है:

mysql_query("SELECT id FROM appointments WHERE dtime>='".(strtotime("-1 week"))."'); 

चयनित आईडी (1) 1 सप्ताह या उससे अधिक हैं।