मैं जानना चाहता हूं कि क्या ऋतुओं की पहचान करने का कोई आसान तरीका है: वसंत, गर्मी, शरद ऋतु या सर्दी। मुझे एक 'रिज्यूमे' तैयार करना है और मैं चाहता हूं कि अगर काम करने की अवधि मोटे तौर पर एक मौसम में फिट बैठती है (बिल्कुल नहीं बल्कि उदाहरण के लिए +/- 10 दिनों की त्रुटि के साथ) यह वसंत, गर्मी, शरद ऋतु या सर्दी लौटाती है।

पसंद:

  • इनपुट: 25/06/2010, 30/09/2010
  • आउटपुट: समर 2010

(स्पेन में गर्मी 21 जुलाई से 20 सितंबर के बीच होती है)

  • इनपुट: 02/02/2009, 30/04/2010
  • आउटपुट: 2009-2010

कोई आईडिया कि इसे कैसे किया जाए?

php
1
udexter 28 अक्टूबर 2011, 14:13
यदि दो तिथियां जैसे 01/01/2010, 01/01/2012 दर्ज की जाती हैं, तो व्यवहार कैसा होगा?
 – 
fredley
28 अक्टूबर 2011, 14:21
यह वसंत, ग्रीष्म, पतझड़ या सर्दियों में तभी वापस आएगा जब एक अवधि के भीतर हो, अन्य तिथियों में कोई प्रासंगिकता न हो तो यह वापस आ जाएगी यदि अवधि 1 वर्ष से कम है: माह वर्ष - माह वर्ष, 1 वर्ष से अधिक की अवधि के लिए: वर्ष - वर्ष। लेकिन यह आखिरी काम शायद मैं खुद कर सकता था। आपको धन्यवाद
 – 
udexter
28 अक्टूबर 2011, 14:26
SO के बारे में एक प्रश्न, आप मेरे धन्यवाद का पहला संपादन क्यों नहीं कर रहे हैं? यह सवालों पर फिट नहीं बैठता? धन्यवाद
 – 
udexter
28 अक्टूबर 2011, 14:27

3 जवाब

सबसे बढ़िया उत्तर

जैसा कि आप एक अवधि के लिए एक सीज़न की तलाश कर रहे हैं, मैंने जल्दी से इस फ़ंक्शन को लिखा है, इसमें सुधार किया जा सकता है और इसमें कुछ बग हो सकते हैं लेकिन आपके पास शुरू करने के लिए कहीं है।

function season($period) 
{
    $seasons    = array(
        'spring'    => array('March 21'     , 'June 20'),
        'summer'    => array('June 21'      , 'September 22'),
        'fall'      => array('September 23' , 'December 20'),
        'winter'    => array('December 21'  , 'March 20')
    );

    $seasonsYear = array();

    $start      = strtotime($period[0]);
    $end        = strtotime($period[1]);

    $seasonsYear[date('Y', $start)] = array();

    if (key(current($seasonsYear)) != date('Y', $end))
        $seasonsYear[date('Y', $end)] = array();

    foreach ($seasonsYear as $year => &$seasonYear)
        foreach ($seasons as $season => $period)
            $seasonYear[$season] = array(strtotime($period[0].' '.$year), strtotime($period[1].' '.($season != 'winter' ? $year : ($year+1))));

    foreach ($seasonsYear as $year => &$seasons) {
        foreach ($seasons as $season => &$period) {
            if ($start >= $period[0] && $end <= $period[1])
                return ucFirst($season).' '.$year;

            if ($start >= $period[0] && $start <= $period[1]) {
                if (date('Y', $end) != $year) 
                    $seasons = $seasonsYear[date('Y', $end)];   
                    $year = date('Y', $end);

                $nextSeason = key($seasons);
                $nextPeriod = current($seasons);                
                do {                    
                    $findNext   = ($end >= $nextPeriod[0] && $end <= $nextPeriod[1]);

                    $nextSeason = key($seasons);
                    $nextPeriod = current($seasons);
                } while ($findNext = False);

                $diffCurr   = $period[1]-$start;
                $diffNext   = $end-$nextPeriod[0];

                if ($diffCurr > $diffNext)
                    return ucFirst($season).' '.$year;
                else {
                    return ucFirst($nextSeason).' '.$year;
                }
            }
        }
    }
}

echo season(array('07/20/2010', '08/20/2010'));
echo "\n";
echo season(array('06/25/2010', '09/30/2010'));
echo "\n";
echo season(array('08/25/2010', '11/30/2010'));
echo "\n";
echo season(array('12/21/2010', '01/01/2011'));
echo "\n";
echo season(array('12/21/2010', '03/25/2011'));

नतीजा:

/*
Summer 2010
Summer 2010
Fall 2010
Winter 2010
Winter 2011
*/

और सिवाय इसके कि आप "सीज़न ईयर ओवरफ़्लो" के लिए चाहते हैं:

if (date('Y', $end) != $year) 
    return $year.'-'.date('Y', $end);

के बजाए:

if (date('Y', $end) != $year) 
    $seasons = $seasonsYear[date('Y', $end)];   
    $year = date('Y', $end);

नोट: सर्दी आ रही है।

2
Fy- 28 अक्टूबर 2011, 16:00

ऐसा लगता है कि इस आदमी ने वह फ़ंक्शन पहले से ही लिखा हुआ है: http://biostall.com/get -वर्तमान-मौसम-उपयोग-php

यहां तक ​​कि गोलार्द्ध का समर्थन भी है!

लेकिन यह चाल चलनी चाहिए:

<?php
    function getSeason($date) {
        $season_names = array('Winter', 'Spring', 'Summer', 'Fall');  
        if (strtotime($date) < strtotime($date_year.'-03-21') || strtotime($date) >= strtotime($date_year.'-12-21')) {  
            return $season_names[0]; // Must be in Winter
        } elseif (strtotime($date) >= strtotime($date_year.'-09-23')) {  
            return $season_names[3]; // Must be in Fall  
        } elseif (strtotime($date) >= strtotime($date_year.'-06-21')) {  
            return $season_names[2]; // Must be in Summer  
        } elseif (strtotime($date) >= strtotime($date_year.'-03-21')) {  
            return $season_names[1]; // Must be in Spring  
        }  
    }
2
Tom 28 अक्टूबर 2011, 14:32

आपको क्या करने की आवश्यकता है इसका एक संक्षिप्त अवलोकन यहां दिया गया है:

  • काम करें जब आपकी सीज़न सीमाएँ होने वाली हों। यह एक बड़ा, बड़ा काम है अगर आप इसे अंतरराष्ट्रीय दायरे के लिए करने जा रहे हैं!

  • दिनांक सीमा के साथ प्रस्तुत किए जाने पर, पहले यह निर्धारित करें कि प्रत्येक सीज़न में उस सीमा के कितने दिन हैं।

आप आउटपुट चाहते हैं जैसे:

 Range | Days | complete?
  Su10 |  12  |     0
   A10 |  90  |     1
   W10 |  02  |     0
  • एक बार यह हो जाने के बाद आपको यह पहचानने की आवश्यकता होगी कि क्या एक सीज़न 'पूर्ण' है, जो कि 1 होना चाहिए, यदि पूरे सीज़न में काम किया जाता है, तो 10 दिनों के भीतर। अगर है तो उस मौसम को चुनें। यदि अधिक पूर्ण हैं, या कोई नहीं, तो false लौटाएं।
1
fredley 28 अक्टूबर 2011, 14:28