2012-02-27 17 views
6

मुझे यहां कोई समस्या है ..php - एक घंटा पहले दिए गए समय से पहले

मान लीजिए कि मेरे पास इस तरह का डेटाटाइम है।

 

$date = strtotime($date); 
 

मैं इस की जरूरत है यूनिक्स टाइमस्टैम्प प्रारूप में परिवर्तित किया लेकिन एक घंटे earlier..I

 

$date = strtotime($date-86400) 
 

कोशिश की, लेकिन मुझे लग रहा था कि यह गलत है। जब मैं टेबल में घुस गया तो यह 0 लौटा।

इसे प्राप्त करने का उचित तरीका क्या है?

धन्यवाद।

+0

एक घंटे में 3600 सेकंड और एक दिन में 86400 सेकंड रहे हैं। आपको 3600 सेकंड घटाना होगा। 'स्ट्रेटोटाइम ($ तिथि) - 3600;' – Cheery

उत्तर

4

स्ट्रेटोटाइम आपको अपनी तिथि का यूनिक्स टाइमस्टैम्प देगा।

$date = strtotime($date) - 3600; // 3600 = 60 * 60 

आप strtotime($date - 3600) कॉल करते हैं, इसके लिए -3600 (जैसे strtotime(-3600)) समय प्राप्त करने के की तरह है क्योंकि strtotime पहले तर्क के रूप में एक स्ट्रिंग की उम्मीद है जो कोई मतलब नहीं है: इस टाइमस्टैम्प से, आप तो अपने घंटे घटाना।

+2

एक घंटे में 3600 सेकेंड और एक दिन में 86400 सेकेंड हैं। – Cheery

+0

आह हाँ ... मैं पूरी तरह से गड़बड़ में था ... मुझे 60 * 60 * 24 की गिनती नहीं करनी चाहिए ... जो मुझे एक दिन में सेकंड देता है ... बेवकूफ मुझे :( – foxns7

5

आप कर सकता है:

 

$testDateStr = strtotime($date); 
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr)); 
 

आशा है कि यह मदद करता है

+0

जबकि यह उत्तर सुंदर आत्म- 'डेट()' और 'स्ट्रेटोटाइम()' से परिचित लोगों के लिए स्पष्टीकरण, यह कुछ स्पष्टीकरण के साथ आपके उत्तर में सुधार करेगा। – mickmackusa

3

86400 सेकंड एक दिन, नहीं एक घंटा है।

स्ट्रेटोटाइम() का आउटपुट एक यूनिक्स टाइमस्टैम्प है। पहले 3600 सेकेंड वह टाइमस्टैम्प शून्य एक घंटा है। तो:

$date = strtotime($somestring); 

$hourago = $date - 3600; 

या, $ somestring के मूल स्वरूप के आधार पर:

$hourago = strtotime($somestring . " - 1 hour"); 

और भूल नहीं है के बारे में date_default_timezone_set()

1

इस क्वेरी

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour)) 

उपयोग DATE_ADD प्रयास करें एक तिथि मान डालने के लिए जो वर्तमान समय से 1 घंटे कम है।

+0

डाउनवॉटेड क्योंकि ओपी 'mysql' समाधान और न ही' INSERT 'मांगता है। सभी उत्तर कुछ प्रकार के स्पष्टीकरण को भी शामिल करना चाहिए ताकि पाठक उत्तर/दृष्टिकोण से पूरी तरह से समझ सकें/लाभ उठा सकें। – mickmackusa

0

किसी ने अभी तक DateTime ऑब्जेक्ट समाधान की पेशकश नहीं की है, इसलिए मैं करूँगा। यह डेटाटाइम को संभालने के लिए सबसे आधुनिक तरीका है और & सेकंड के किसी भी गणना की आवश्यकता नहीं है।

मैं हमेशा चीजों को निश्चित बनाने के लिए किसी प्रकार की टाइमज़ोन घोषणा में ड्रॉप करना पसंद करता हूं। डेलाइट सेविंग टाइम आमतौर पर डेटाटाइम मैनिपुलेशन के साथ एक चिंता है, लेकिन शायद इस मामले में ठीक है। अपने मामले के लिए टाइमज़ोन को संशोधित करने के लिए स्वतंत्र महसूस करें।

पीएचपी मैनुअल लिंक:

संहिता (स्वरूपित ti सहित मुझे तुलना के लिए) Demo Link:

$now=new DateTime('NOW UTC'); 

$now_stamp=$now->getTimestamp(); 
$formatted_now=$now->format("Y-m-d H:i:s"); 
echo "$now_stamp ($formatted_now)\n"; 

$hour_ago=$now->modify('-1 hour'); 
$hour_ago_stamp=$hour_ago->getTimestamp(); 
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s"); 
echo "$hour_ago_stamp ($formatted_hour_ago)"; 

आउटपुट:

1492687193 (2017-04-20 11:19:53) 
1492683593 (2017-04-20 10:19:53) 
संबंधित मुद्दे