2010-08-03 12 views
10

प्रारंभिक तिथि देकर, मैं चार अलग-अलग तिथियों को प्रत्येक सप्ताह एक सप्ताह में अलग करने के लिए चार बार सात दिन जोड़ रहा हूं।टाइमस्टैम्प में दिन जोड़ना

//$date = '28-10-2010'; 
$timestamp = mktime(0, 0, 0, 10, 01, 2010); 
echo "Date=".date('d-m-Y', $timestamp)."<br>"; 

$timestamp += (60*60*24*7); 
echo "Date=".date('d-m-Y', $timestamp)."<br>"; 

$timestamp += (60*60*24*7); 
echo "Date=".date('d-m-Y', $timestamp)."<br>"; 

$timestamp += (60*60*24*7); 
echo "Date=".date('d-m-Y', $timestamp)."<br>"; 

$timestamp += (60*60*24*7); 
echo "Date=".date('d-m-Y', $timestamp)."<br>"; 

कोड आउटपुट इस:

Date=01-10-2010 Friday 
Date=08-10-2010 Friday 
Date=15-10-2010 Friday 
Date=22-10-2010 Friday 
Date=29-10-2010 Friday 

कौन सा रूप में लंबे समय के रूप में मैं जानता हूँ कि यह सही है। लेकिन, देखें कि 2010-10-31 और 2010-11-01

$ timestamp = mktime (0, 0, 0, 10, 28, 2010) के दौरान क्या होता है; [...]

मजे की बात है कि यह इस आउटपुट:

Date=28-10-2010 Thursday 
Date=03-11-2010 Wednesday 
Date=10-11-2010 Wednesday 
Date=17-11-2010 Wednesday 
Date=24-11-2010 Wednesday 

क्या हो रहा है? दूसरी तारीख 04-11-2010 होनी चाहिए! इसके अलावा, मैंने देखा कि यह "असफल" हर दस साल होता है! क्या यह डेलाइट बचत समय से संबंधित कुछ है? यदि हां, तो मैं इसे कैसे हल करूं? क्या कोई ऐसी चीज है जिसे मैं देख रहा हूं?

संपादित करें: ठीक है, मैं समय outputed, बस देखने के लिए कि क्या होता है और यह है कि क्या मैं अब मिल गया है:

Date=28-10-2010 Thursday :: 00:00:00 
Date=03-11-2010 Wednesday :: 23:00:00 
Date=10-11-2010 Wednesday :: 23:00:00 
Date=17-11-2010 Wednesday :: 23:00:00 
Date=24-11-2010 Wednesday :: 23:00:00 

समय के साथ संबंधित कुछ, कुछ 2010/11/31 में क्या होता है लगता है ...

उत्तर

36

कभी उपयोग गणित की तरह 60 * 60 * 24 * 7/घटाना दिन (डेलाइट सेविंग समय की वजह से) जोड़ने के लिए, का उपयोग strtotime या mktime बजाय:

$timestamp = strtotime('+7 days', $timestamp); 

// Or something like this (it's OK to have day parameter <= 0 or > 31) 
$timestamp = mktime(0, 0, 0, $month, $day + 7, $year); 

आपका उदाहरण है अगर और अधिक स्पष्ट हो जाएगा आप उत्पादन समय हूँ के साथ-साथ:

$timestamp = mktime(0, 0, 0, 10, 28, 2010); 
echo date('Y-m-d H:i:s', $timestamp) . "\n"; 

$timestamp += 60*60*24*7; 
echo date('Y-m-d H:i:s', $timestamp) . "\n"; 

आउटपुट:

2010-10-28 00:00:00 
2010-11-03 23:00:00 

यहाँ आप 2010-11-03 23:00:00 बजाय 2010-11-04 00:00:00 है, क्योंकि दिन (31 अक्टूबर) में से एक घंटे लंबा बजाय 24.

0

मैं, जोड़ने दिनों के लिए इस पद्धति के साथ सफलता का एक बड़ा सौदा किया है, हालांकि मैं अपने स्वरूप के साथ परीक्षण नहीं किया:

$date = The value of the database from your query 
$daysahead = The number of days ahead you want to calculate 
$final_date = date(“m/d/Y”, strtotime($date) + (86400 * $daysahead)); 

echo $final_date; 
2

ऐसा लगता है कि आप डेलाइट टाइम बचत या उनसे वापस लौट आए हैं।

पॉज़िक्स समय (टाइमस्टैम्प) हमेशा यूटीसी होता है जबकि स्थानीय समय यूटीसी + एक्स एक्स समय बचत के अनुसार तिथि से बदल सकता है।

1

मेरा मानना ​​है कि इसका दिन डेलाइट सेविंग टाइम के साथ कुछ करना है क्योंकि आपके टाइमस्टैम्प का 'टाइम' सेगमेंट डॉट पर मध्यरात्रि पर सेट होता है, लेकिन जब डेलाइट बचत समाप्त होती है तो हम एक घंटे वापस जाते हैं - जो अभी भी पिछले दिन है (11 बजे)।

आप मूल लाइन के लिए 2 घंटे जोड़ने यदि ऐसा है तो आप इस राशि:

$timestamp = mktime(2, 0, 0, 10, 01, 2010); 

और इसलिए बल्कि आधी रात से 2 पर शुरू ... यह काम करता है।

+0

क्या आपका समाधान दुनिया भर में काम करेगा? –

2

यह वास्तव में समय क्षेत्र/डीएसटी संबंधित प्रतीत हो रहा है है।

पहली पंक्ति के रूप

date_default_timezone_set('UTC'); 

जोड़ा जा रहा है इस मुद्दे को हल करती है (जैसा कि आप अब किसी भी डीएसटी सेटिंग्स का उपयोग करें)।

+0

यह भी काम किया। –

1

मैं कभी नहीं समझूंगा कि लोग इस भयानक mktime फ़ंक्शन का उपयोग क्यों करते हैं।

मामले में आप अभी तक PHP5.3 पर हैं, तो आप PHP5.3 बिना

$period = new DatePeriod(
    new DateTime('28-10-2010'), 
    DateInterval::createFromDateString('1 week'), 
    4); 

foreach ($period as $dt) { 
    echo $dt->format("l Y-m-d H:i:s\n"); 
} 

का उपयोग कर आप अभी भी उपयोग कर सकते हैं

for($i=0; $i<=4; $i++) { 
    echo date('Y-m-d', strtotime("+$i weeks 28-10-2010")), PHP_EOL; 
} 

दिनांक समय सवालों pretty common on SO, so you might find interesting cases when searching हैं पर विचार करना चाहते हो सकता है।

0

यदि किसी को इसकी आवश्यकता है, तो बस मुझे साइट का संदर्भ देने की तरह: आज, वर्तमान समय, वाई-एम-डी एच: i: s, प्लस +7 दिन। या आप +3 महीने, आदि जोड़ सकते हैं

$timestamp=strtotime("+7 Days"); 
$nowtime = date('Y-m-d H:i:s', $timestamp); 
संबंधित मुद्दे