2012-01-02 6 views
1

У меня есть количество дней до даты в будущем, но хотелось бы узнать, сколько недель и дней прошло. Кроме того, отмечая, что если его меньше недели, то он просто возвращает тот же номер.Php - недели/дни с дней

Возможно ли это?

например. 17 дней будет 2 недели и 3 дня

например. 4 дня будет 4 дня

+6

Недостаточно оператора modulo? Как? '$ x% 7' дает вам количество дней, которые не вписывались в целую неделю, и вы можете определить количество недель оттуда тривиально. См. Также: The Fine Manual, там: http://php.net/manual/en/language.operators.arithmetic.php – Piskvor

+1

+1 для предложения @ Писквора, но если вам понадобится больше недель, вы можете посмотреть PHP [DateInterval] (http://php.net/manual/en/class.dateinterval.php). –

+0

Писквор справа. Получите недели на 'round ($ x/7)', а затем на дни $ x% 7' – Nonym

ответ

5

Я хотел бы попробовать что-то вроде этого:

$days = 17; 
$weeks = floor($days/7); 
$dayRemainder = $days % 7; 
echo $days.'<br/>'.$weeks.'<br/>'.$dayRemainder;//add whatever logic you need here to get the display the way you want it. 
0

Как упомянута Piskvor, вы должны использовать оператор по модулю:

$weeks = $days/7; 
$daysleft = $days%7; 
+0

Если $ x = 13; затем $ weeks == 1.8571428571429 и $ daysleft == 6. Закрыть, но нет сигары. – Piskvor

+0

$ weeks = floor ($ days/7); –

1
$weeks = intval($days/7); 
$days = $days % 7; 

if($weeks) 
{ 
    printf("%d weeks", $weeks); 
} 
if($days) 
{ 
    if($weeks) 
    { 
     printf(" and "); 
    } 
    printf("%d days", $days); 
} 
0

Скажем й количество дней, W выводится значение недели и D выводится стоимость оставшихся дней.

сначала сделать целочисленное деление

Ш = х/7;

Затем вы берете остаток: D = x% 7;

+0

'W' не обязательно будет целым числом, из-за того, что PHP слабо типизирован. Вы хотите использовать «floor()». – Piskvor

+0

Да, вы правы! Я просто пишу очень общий способ, а не точный PHP-код;) – rkosegi

1

Что-то вдоль линий это должно работать

function getnumweeks(d) { 
    totalDays = d; 
    numWeeks = floor(d/7); 
    if numWeeks != 0 { 
     extraDays = totalDays % 7; 
     return array(extraDays, numWeeks); 
    } else { 
     return array(totalDays, 0) 
    } 
} 

Тогда вы можете позвонить и использовать его в качестве такового:

ans = getnumweeks(17) 

ans[0] <- Contains number of days 
ans[1] <- Contains Number of Weeks 
0
$num_days = $databack30[days_to_next_event]; 
$weeks = floor($num_days/7); 
$days = $num_days % 7; 

if($weeks>'0'){ $whenitis = ' in '.$weeks.' weeks and '.$days.' days'; } 

else { $whenitis = ' in '.$days.' days'; } 
Смежные вопросы