2015-04-20 59 views
3

我有一個cron作業和運行第二個星期五派遣一個郵件列表PHP下一秒週五相對於當前日期

0 8 * * 5 test $(($(date +\%V)\%2)) -eq 1 

我怎麼會發現相對於PHP的當前日期的下一個發貨日期所以我可以在下一次派遣時通知用戶。

@returns next second Friday date from random_date 
function next_dispatch_date(random_date){ 
} 
echo "Next Dispatch on" . next_dispatch_date(date()); 

回答

3

是我腦子裏浮現的第一個解決方案是這樣的:

$dt = new DateTime(); 
$dt->modify('next friday'); // Next friday from now 
$dt->modify('next friday'); // Next friday from next friday 

echo $dt->format('Y-m-d'); 

,或者作爲函數暗示要在你的信息:

function next_dispatch_date($timestamp){ 
    $dt = new DateTime(); 
    $dt->setTimestamp($timestamp); 
    $dt->modify('next friday'); 
    $dt->modify('next friday'); 

    return $dt->format('Y-m-d'); 
} 

echo "Next dispatch on ".next_dispatch_date(time()); 

請注意,與您原來的帖子相比,我使用time()而不是date(),其中我用於格式化時間戳。

+0

您也可以使用這個:' $ dt->修改('這個星期五+ 2周')'。 Makse它更簡單。 –

+0

@awons是的,這節省了一條線,但它取決於要求。在星期五前一天,這實際上會讓我們從現在開始的第三個星期五。 – jeromegamez

+0

謝謝你們看起來像我需要在PHP中刷新日期。我使用了$ dt-> modify('next friday + 1 weeks')來得到正確的日期2015-05-01 – ericsicons

0

可以使用strtotime()相對格式(見PHP manual

@returns next second Friday date from random_date 
function next_dispatch_date($random_date){ 
    date('Y-m-d', strtotime('Friday next week '.$random_date)); 
} 

假設$random_date是格式 'YM-d' ...

+0

即使是相同的文件說,以避免strtotime與日期做數學。 –

相關問題