2010-03-09 10 views
9

मेरे वेब एप्लिकेशन में, मेरे पास उपयोगकर्ता एक साधारण टेक्स्टबॉक्स में एक तिथि इनपुट करते हैं। उस इनपुट (निश्चित रूप से स्वच्छ होने के बाद), strtotime() के माध्यम से चलाया जाता है, और 8639 9 उसमें जोड़ा जाता है, ताकि उस टाइमस्टैम्प को दिन के अंत (11:59:59) के अंत में बनाया जा सके। यह नियत तारीख उद्देश्यों के लिए है (इसलिए यदि तारीख से गुजरता है, आवेदन एक झंडा उठाती)14 मार्च 86400 सेकेंड लंबा नहीं?

दिनों मैं परीक्षण किया है, यह काम के लिए ...

5 जनवरी, जनवरी 5 वीं के रूप में सहेजा के अंत में दिन।

मार्च 13 वीं के रूप में मार्च 13 वीं बचाया

मार्च 15 वीं के रूप में मार्च 15 वीं

14 मार्च, जो भी कारण के लिए बचा लिया, के रूप में मार्च 15 वीं खुद को बचा लिया।

14 मार्च रहस्यमय तरीके से कुछ सेकंड छोटा या कुछ है ??


अद्यतन: समाधान के लिए ओज़ी के लिए धन्यवाद - एक आकर्षण की तरह काम किया। कोड के रूप में अनुरोध:

पुराने कोड:

if ($_POST['dateto'] != '') { 
    $dateto = strtotime(mysql_real_escape_string($_POST['dateto'])) + 86399; 
} 

नए कोड:

# Offset to "end of day" 
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($_POST['dateto']))); 
$d++; 
$dateto = strtotime($y . '-' . $m . '-' . $d) - 1; 
+1

अपना कोड पोस्ट करें। – Nate

+3

आपके पास शायद दिन/महीना/वर्ष भाग पार्सिंग करने के लिए अधिक भाग्य होगा, इसमें 23:59:59 को जोड़कर और यूनिक्स-स्टाइल टाइमस्टैंप में कनवर्ट करना होगा। – meagar

+3

मार्च के Ides से सावधान रहें! –

उत्तर

2

की तरह अन्य लोगों ने कहा की शुरुआत है क्योंकि, इस डेलाइट बचत समय की वजह से है। इस समस्या को हल करने के लिए, आप यह कर सकते हैं:

<?php 
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($date_from_user))); 
$h = 23; 
$i = 59; 
$s = 59; 
$mytimestamp = "$y-$m-$d $h:$i:$s"; 
?> 
18

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

+0

हेड-अप के लिए धन्यवाद ... यह मिशन-महत्वपूर्ण नहीं है, इसलिए मुझे लगता है कि मेरे कोड में यह बग अब के लिए बंद हो सकता है;) –

-1

http://tycho.usno.navy.mil/leapsec.html

नहीं सभी दिनों 86400 सेकंड की होती है।

यह एक दुर्लभ घटना है। और (ऐतिहासिक रूप से) मार्च में कभी निर्धारित नहीं किया गया।

+0

विकिपीडिया के मुताबिक, लीप सेकेंड "आमतौर पर 30 जून के अंत में निर्धारित होते हैं या 31 दिसंबर (हालांकि किसी भी महीने के अंत में लीप सेकंड लागू किए जा सकते हैं) "। स्रोत: http://en.wikipedia.org/wiki/Leap_second –

+1

सच है, लेकिन यह ध्यान दिया जाना चाहिए कि POSIX समय से संबंधित लाइब्रेरी फ़ंक्शंस (mktime, gmtime, आदि) को लीप सेकेंड को नजरअंदाज करने की आवश्यकता होती है - इसलिए time_t अगले दिन 23:59:59 और 00:00:00 के मान हमेशा 1 सेकंड से भिन्न होंगे, भले ही 23:59:60 पर इंटरवेंशन लीप दूसरा हो। (मुट्ठी हिलाता है ...) –

+0

इसके अलावा, अधिकांश कंप्यूटिंग सिस्टम –

3

मुझे लगता है कि इस daylight savings time

+5

कृपया महोदय, क्या मैं थोड़ा और दिन की रोशनी बचा सकता हूं? –

+0

बहुत अच्छा मैं बिल्कुल वर्तनी नहीं कर सकता हूं और हाँ मैं मूल अंग्रेजी स्पीकर – rerun

1

आप किस डेटाबेस का उपयोग कर रहे हैं? ऐसा करने का एक बेहतर तरीका होना चाहिए (अधिकांश दिनांक मैनिपुलेशन कमांड डेटाबेस विशिष्ट हैं)। एसक्यूएल सर्वर में, मैं सिर्फ तारीख को 1 दिन जोड़ना होगा और उसके बाद 1 घटाना दूसरा:

DECLARE @YourDate datetime 
SET @YourDate='2010-03-14' 

SELECT DATEADD(ss,-1,@YourDate+1) 

उत्पादन:

----------------------- 
2010-03-14 23:59:59.000 

(1 row(s) affected) 
क्या इसके लायक है के लिए

, मैं बहुत चाहते एक को पसंद हालत: < NextDay<=CurrentDay12_59_59

+0

डेटाबेस में यूनिक्स टाइमस्टैम्प के रूप में तारीखों को संग्रहीत कर रहा हूं, जो दस अंकों का पूर्णांक है ... मुझे लगता है कि यह शायद बेहतर होगा डेटाटाइम प्रकार का उपयोग करने के लिए, लेकिन क्या किया जाता है ... दिनांक के बारे में दिलचस्प बिंदु + 1-1 सेकंड ... मैं इसे देख लूंगा। –

1

हर समय जो क्षेत्र "daylight savings time" समर्थन करता है, आपको साल में दो दिन मिलेंगे जिनके पास 24 घंटे नहीं है। उनके पास क्रमश: 25h या 23h होगा। और उन तिथियों को कड़ी मेहनत करने के बारे में भी मत सोचो। वे हर साल, और समय क्षेत्र के बीच बदल जाते हैं।

ओह, और यहां 34 other reasons that you hadn't thought about, and why you shouldn't do what you're doing की एक सूची है।

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