टाइमज़ोन के साथ खिलवाड़ करने के बजाय, ऐसा क्यों न करें
ALTER TABLE `your_table`
CHANGE `date_added` `date_added`
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
यह बदल जाएगा आपका कॉलम DATE कॉलम से TIMESTAMP कॉलम तक , प्रक्रिया में सभी तिथियों को उनके संबंधित UTC टाइमस्टैम्प में परिवर्तित करना।
जब एक नई पंक्ति डाली जाती है, यह वर्तमान टाइमस्टैम्प का उपयोग करेगा मान के रूप में . टाइमस्टैम्प हमेशा UTC में होते हैं, इसलिए आपको अपने MySql सर्वर पर टाइमज़ोन बदलने की ज़रूरत नहीं है, और न ही कोई नई पंक्ति डालने की तारीख की आपूर्ति करने की आवश्यकता है।
यदि आप अपने कॉलम नहीं बदल सकते हैं या नहीं बदलना चाहते हैं, तो आप केवल टाइमस्टैम्प के माध्यम से भी चुन सकते हैं
SELECT UNIX_TIMESTAMP('date_added') FROM your_table;
अपने TimeAgo के लिए, आप बस ऐसा कर सकते हैं
$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);
जब आप डेटटाइम को टाइमस्टैम्प की आपूर्ति करते हैं, तो यह आपके डिफ़ॉल्ट सर्वर टाइमज़ोन सेट की परवाह किए बिना हमेशा यूटीसी का उपयोग करेगा। नतीजतन, आपको या तो $dateAdded
. कन्वर्ट करना होगा डिफ़ॉल्ट टाइमज़ोन में (जैसा कि ऊपर दिखाया गया है) या कन्वर्ट करें $timeSinceAdded
यूटीसी को।
दिनांक समय को वर्तमान में आने वाले उपयोगकर्ता के समय क्षेत्र में बदलने के लिए, आप या तो
- आपके डेटाबेस में यह जानकारी होनी चाहिए, उदा. क्योंकि आप पंजीकृत उपयोगकर्ताओं से यह जानकारी देने के लिए कह रहे हैं
- या आप इसे रनटाइम पर निर्धारित करते हैं, आमतौर पर जियोआईपी लुकअप करके विज़िटिंग उपयोगकर्ता का आईपी या उपयोगकर्ता के ब्राउज़र से डेटटाइम ऑफ़सेट भेजकर।
किसी भी स्थिति में, फिर आप दोनों डेटटाइम्स को उस टाइमज़ोन में बदल दें। यह आसानी से setTimezone()
. के माध्यम से किया जाता है ।
$timeSinceAdded
तब एक DateInterval
होगा ऑब्जेक्ट, जिसे आप इस तरह इस्तेमाल कर सकते हैं
echo $timeSinceAdded->format('%a total days');
कृपया अधिक विवरण के लिए लिंक देखें, उदाहरण के लिए उपलब्ध प्रारूप संशोधक पर।