2010-06-24 14 views
5

का उपयोग करके समय उलटी गिनती कैसे प्रदर्शित करें I PHP का उपयोग करके समय उलटी गिनती कैसे प्राप्त करें?PHP और MySQL

मैं 3Days 4Hours जैसे कुछ प्रदर्शित करना चाहता हूं। मेरे पास MySQL तालिका से आने वाला दिनांक क्षेत्र है और आज की तारीख के साथ इसकी गणना करना चाहता हूं। अभी तक मेरे पास केवल तारीख है और डेटाबेस में संग्रहीत समय नहीं है, लेकिन अंततः मैं करूँगा। तो उस समय, मैं 3 डी 4 घंटे 10 मिनट 43 सेकंड के रूप में दिखा सकता हूं। अगर इस सर्वर समय या क्षेत्र जहां उपयोगकर्ता से आ रही है की आधारित काम करता है

$datetime1 = new DateTime($starton);//$starton - date stored in db 
$datetime2 = new DateTime(date()); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%d days); 

मैं उलझन में हूँ:

यह है कि मैं क्या करने की कोशिश की, लेकिन कुछ गलत जवाब हो रही है। कृपया मेरा मार्ग दर्शन कीजिए। जब मेरे पास समय क्षेत्र होता है, तो मुझे लगता है कि मुझे सेकंड्स को लाइव दिखाने के लिए jQuery की आवश्यकता हो सकती है और इसलिए मिनट भी।

+0

'()' के लिए '$ datetime2' तारीख को आपका कॉल ज़रूरत से ज़्यादा और गलत है, यह समस्या हो सकती है? इसके अलावा, आपको किस तरह का गलत जवाब मिलता है? – deceze

+0

जब आप कहते हैं कि 'सेकंड लाइव दिखाएं' ... क्या आपका मतलब है कि आप इसे वास्तविक समय में अपडेट करना चाहते हैं? –

+0

आप सही हैं, यही कारण हो सकता है। क्षमा करें, मैं गलत आउटपुट भी प्राप्त नहीं कर पा रहा हूं, शायद मैंने अन्य चीजों को संशोधित किया है। मैं आपका दूसरा जवाब पढ़ रहा था लेकिन ऐसा लगता है कि आपने इसे हटा दिया है, किसी भी कारण से? – Jay

उत्तर

3

आईएमएचओ जब आप समय की तुलना करने के बारे में सोच रहे हैं, तो आप स्वचालित रूप से यूनिक्स समय से बात करना शुरू कर देते हैं। अनिवार्य रूप से, यूनिक्स समय सेकंड में एक गिनती है जो हमेशा बढ़ता है। जब आपके पास 2 यूनिक्स टाइमस्टैम्प होते हैं, तो आप अंतर को समझने के लिए सरल अंकगणित का उपयोग कर सकते हैं और फिर अंतर को मानव पठनीय रूप में अनुवाद कर सकते हैं।

ध्यान दें कि यूनिक्स टाइमस्टैम्प लगभग सभी प्रोग्रामिंग भाषाओं में आम हैं, इसलिए आप यह चुन सकते हैं कि PHP, MySQL या जावास्क्रिप्ट में ऐसा करना है या नहीं और यह सब एक ही तरीके से निकल सकता है। मैं आपको PHP संस्करण दिखाऊंगा।

तो तुम ऐसा करना चाहते हैं:

  1. अपने लक्ष्य घटना
  2. स्टोर है कि MySQL डेटाबेस में
  3. डेटाबेस से पुन: प्राप्त
  4. जाओ के लिए यूनिक्स टाइमस्टैम्प का पता लगाएं वर्तमान यूनिक्स टाइमस्टैम्प
  5. अंतर पाने के लिए घटाएं
  6. मानव पठनीय प्रारूप प्राप्त करने के लिए गुणा/विभाजित करें

PHP कोड:

//Unix timestamp to Dec. 21, 2012 (midnight) 
$unix_time = mktime(0,0,0,12,21,2012); 
//Connect to MySQL 
//"INSERT INTO table (target_timestamp) VALUES ($unix_time);" 


//----- user goes to page ----- 
//Connect to MySQL 
$sql = "SELECT target_timestamp FROM table WHERE foo = bar"; 
$unix_time = do_query($sql);//do_query not defined, assume it gets the timestamp 
$current_time = time(); 
$diff = $unix_time - $current_time 
//$diff should be positive and not 0 
if(1 > $diff){ 
    exit('Target Event Already Passed (or is passing this very instant)'); 
} else { 
    $w = $diff/86400/7; 
    $d = $diff/86400 % 7; 
    $h = $diff/3600 % 24; 
    $m = $diff/60 % 60; 
    $s = $diff % 60; 

    return "{$w} weeks, {$d} days, {$h} hours, {$m} minutes and {$s} secs away!" 
} 
0

नहीं 100% अपने प्रश्न है, लेकिन ऐसा करने के लिए यह इस होगा एक मैनुअल तरीका का जवाब दे:

$start = strtotime($dbTime); 
$now = time(); 
$differenceInSeconds = $start - $now; 
वहां से

तुम सिर्फ यह प्रारूप में तैयार करना है, और आप एक एल्गोरिथ्म in this answer पा सकते हैं।

0

ठीक है, मुझे लगता है कि अगर आप सर्वर पर दिनांक() कॉल कर रहे हैं, तो आपको सर्वर की तारीख और समय क्षेत्र मिल जाएगा। आप date_default_timezone_set([TIMEZONE]); फ़ंक्शन के साथ टाइमज़ोन को मजबूर कर सकते हैं, हालांकि, यदि यह कोई चिंता है।

यदि मैं ऐसा कर रहा था, और दूसरा-दर-द्वितीय उलटी गिनती चाहता था, तो शायद मैं गणना की अंतराल को जावास्क्रिप्ट में पास कर दूंगा और jQuery को प्रारूपण करने दें, खासकर यदि आप एक सक्रिय काउंटर चाहते हैं।

उस बात के लिए, आप जावास्क्रिप्ट को पूरी बात ऑफलोड सकता है, और यह दो तिथियों के पास, और date1.getTime() - date2.getTime() का उपयोग मिलीसेकेंड में समय अंतर पाने के लिए, और जावास्क्रिप्ट में गणित खुद कर (इस this answer से cribbed है)

शायद यह है कि मैं इसे कैसे करूँगा, अगर मैं इसे जेएस में बदल रहा था।

1

PHP सर्वर द्वारा निर्धारित टाइमज़ोन का उपयोग करेगा, जिसे date_default_timezone_set() का उपयोग करके मैन्युअल रूप से आपकी स्क्रिप्ट में सेट किया जा सकता है। आप इसे दो तरीकों से कर सकते हैं:

आप वास्तव में आपके लिए गणना करने के लिए अपनी MySQL क्वेरी का उपयोग कर सकते हैं। TimeDiff() फ़ंक्शन देखें: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff। फिर, आप इसे प्रारूपित करने के लिए TimeFormat() का उपयोग कर सकते हैं।

वैकल्पिक रूप से आप इसे PHP के माध्यम से कर सकते हैं। आप या तो यूनिक्स युग -> प्रारूप के रूप में प्रारूप में परिवर्तित कर सकते हैं। दूसरा विकल्प दो डेटटाइम ऑब्जेक्ट्स के साथ शुरू करना होगा जैसा आपने किया है। प्रयास करें:

$datetime1 = new DateTime($starton); 
$datetime2 = new DateTime(); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%d days); 

या procedurally:

$datetime1 = date_create($starton); 
$datetime2 = date(); 
$interval = date_diff($datetime1,$datetime2); 
echo $interval->format('%d days'); 

इसके अलावा, अगर आप काउंटर को अद्यतन करने के एक वास्तविक समय के रूप में काउंटर प्रदर्शित करना चाहते हैं; आपको इसे बाद में जावास्क्रिप्ट फ़ंक्शन पर सौंपना होगा।

1

चूंकि आपने jQuery का उल्लेख किया है, इसलिए यह सिर्फ जावास्क्रिप्ट द्वारा करना संभव है यदि यह आपके साथ ठीक है।

jQuery उलटी गिनती प्लगइन और काम उदाहरण: http://keith-wood.name/countdown.html

बचाने करेंगे आप भी अपने डाटाबेस को कॉल करते थे।

0

यह एक समाधान है कि कुछ चौखटे (पर रूबी) की तरह घेरने की कोशिश की है, पीएचपी उनमें से एक होने के लिए प्रकट नहीं होता है, मुझे लगता है कि आप देख रहे हैं है कुछ की तरह:

http://www.phpro.org/examples/Convert-Seconds-To-Hours-Minutes-Seconds-Words.html