2017-04-03 68 views
-1

假設我每個星期一和每個星期三都有辦公時間。如何在php中獲取下一個匹配的星期幾?

我想顯示「下一個辦公時間:星期三」,它將自動顯示與今天的日期相關的下一個即將到來的辦公日。

所以,我有以下幾點:

$today = date('w'); // returns 0,1,2,3.... 

$dowMap = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 

$officeday = 3 // Monday = 1, Wednesday = 3... 

我試着用以下來實現:

if($officeday >= $today) { 
    echo 'NEXT OFFICE HOURS: ' . $dowMap[$officeday]; 
} 

但大於週一因不大於比較不工作始終例如星期五。我如何修改這個以獲得下一個即將到來的實際日期?

謝謝!

回答

1

UPDATE

$today = date('w'); // returns 0,1,2,3.... 
    $dowMap = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'); 
    $officeday = 3 ;// Monday = 1, Wednesday = 3... 
    $firstday = 1; 

    if($officeday >= $today and $today <= 5) { 
     echo 'NEXT OFFICE HOURS: ' . $dowMap[$officeday+1]; 
    } 
    else{ 
     echo 'NEXT OFFICE HOURS: ' . $dowMap[$firstday]; 
    } 

結果是當officeday範圍將顯示辦公室一天+ 1或($ dowMap [indexNext]);其他的將在第一天顯示變量$的第一天的索引。

+0

謝謝。我試圖看看我可以如何使用你的例子,但辦公日子每個月都會改變,所以我希望不要像星期一那樣硬編碼特定的日子。 – LBF

+0

您可以在數據庫中保存設置辦公室第一天的日期..並將您的索引第一天的職位替換爲$ dowMap [1]。我更新我的答案,讓我知道它是否工作。 –

+0

感謝您的更新。我會試一試,讓你知道。 – LBF

0

下面是一個有趣的方式:使用一個InfiniteIterator來循環一週的日子。一旦你打了一天,是可以接受的,可以停止和返回值:

$availableOfficeHours = new class() { 
    public function __construct() 
    { 
     //For added fun, use a SplEnum! 
     $this->daysOfWeek = [ 
      'Monday', 
      'Tuesday', 
      'Wednesday', 
      'Thursday', 
      'Friday', 
      'Saturday', 
      'Sunday', 
     ]; 

     $this->daysOfWeekIterator = new InfiniteIterator(new ArrayIterator($this->daysOfWeek)); 

     $this->officeHours = [ 
      'Monday', 
      'Wednesday' 
     ]; 
    } 

    public function getNextOfficeDay($today) 
    { 
     if(!in_array($today, $this->daysOfWeek)){ 
      throw new InvalidArgumentException('$today must be a spelled out name of the week. Example: "Monday".'); 
     } 

     //Set the iterator to today... 
     while($today !== $this->daysOfWeekIterator->current()){ 
      $this->daysOfWeekIterator->next(); 
     } 

     do { 
      $this->daysOfWeekIterator->next(); 
      $day = $this->daysOfWeekIterator->current(); 
     } while(!in_array($day, $this->officeHours)); 

     return $day; 
    } 

}; 

echo $availableOfficeHours->getNextOfficeDay('Monday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Tuesday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Wednesday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Thursday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Friday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Saturday') . PHP_EOL; 
echo $availableOfficeHours->getNextOfficeDay('Sunday') . PHP_EOL; 

//Get based on today's date: 
$today = date('l'); 
echo $availableOfficeHours->getNextOfficeDay($today) . PHP_EOL; 

輸出:

Wednesday 
Wednesday 
Monday 
Monday 
Monday 
Monday 
Monday 
Wednesday 

這工作,因爲一個InfiniteIterator將循環自身周圍,而無需手動重置它,因此在本週晚些時候設置它可以讓它旋轉並在週一的第一天。這可能不是最實際的做法實踐方式。我只是想玩弄InfiniteIterator。

+0

有趣!我會給這個鏡頭,看看它是如何運作在我的情況。 – LBF