Как узнать количество понедельников или вторников между двумя датами?

Самые внутренние парсеры в вашем примере будут выражением, а в C ++ грамматика определяет expression как assignment-expression или другой expression, за которым следует запятая, а другая assignment-expression (Приложение A.4 - Грамматика / Выражения).

Грамматика далее определяет assignment-expression как один из нескольких других типов выражения, ни один из которых не может быть ничем (или только пропуском).

So причина, по которой вы не можете A a(()), просто потому, что грамматика этого не позволяет. Тем не менее, я не могу ответить, почему люди, которые создали C ++, не позволяли этому конкретному использованию пустых парнеров как своего рода особый случай - я бы предположил, что они предпочли бы не вставлять такой особый случай, если бы разумная альтернатива.

13
задан svk 29 September 2010 в 16:48
поделиться

3 ответа

Вы можете создать функцию, рекурсивно использующую strtotime () для подсчета количества дней. Поскольку strtotime ("в следующий понедельник"); отлично работает.

function daycount($day, $startdate, $counter)
{
    if($startdate >= time())
    {
        return $counter;
    }
    else
    {
        return daycount($day, strtotime("next ".$day, $startdate), ++$counter);
    }
}

echo daycount("monday", strtotime("01.01.2009"), 0);

Надеюсь, это то, что вы ищете :)

8
ответ дан 1 December 2019 в 19:31
поделиться

без циклов и без рекурсии

<?php
define('ONE_WEEK', 604800); // 7 * 24 * 60 * 60

function number_of_days($days, $start, $end) {
    $w = array(date('w', $start), date('w', $end));
    $x = floor(($end-$start)/ONE_WEEK);
    $sum = 0;

    for ($day = 0;$day < 7;++$day) {
        if ($days & pow(2, $day)) {
            $sum += $x + ($w[0] > $w[1]?$w[0] <= $day || $day <= $w[1] : $w[0] <= $day && $day <= $w[1]);
        }
    }

    return $sum;
}

//$start = $end = time();

// 0x10 == pow(2, 4) == 1 << 4 // THURSDAY
// 0x20 == pow(2, 5) == 1 << 5 // FRIDAY
echo number_of_days(0x01, $start, $end); // SUNDAY
echo number_of_days(pow(2, 0), $start, $end); // SUNDAY
echo number_of_days(0x02, $start, $end); // MONDAY
echo number_of_days(pow(2, 1), $start, $end); // MONDAY
echo number_of_days(0x04, $start, $end); // TUESDAY
echo number_of_days(1 << 2, $start, $end); // TUESDAY
echo number_of_days(0x08, $start, $end); // WEDNESDAY
echo number_of_days(1 << 3, $start, $end); // WEDNESDAY
echo number_of_days(0x10, $start, $end); // THURSDAY
echo number_of_days(0x20, $start, $end); // FRIDAY
echo number_of_days(0x40, $start, $end); // SATURDAY
echo number_of_days(0x01 | 0x40, $start, $end); // WEEKENDS : SUNDAY | SATURDAY
echo number_of_days(0x3E, $start, $end); // WORKDAYS : MONDAY | TUESDAY | WEDNESDAY | THURSDAY | FRIDAY
?>
8
ответ дан 1 December 2019 в 19:31
поделиться

Я получил ответ. Он работает только в воскресенье. Но я не знаю, как сделать это в течение следующих дней

<?php

// Define a constant of 1 day in seconds
define(ONE_DAY, 86400); 
date_default_timezone_set('America/New_York'); 

// Accepts two timestamps, start and end 
// Returns an array of timestamps that fall on a sunday 
function sundays_in_range($start, $end) {    
    echo date('N', $start);
    echo "<br/>";                     
    $days_until_sunday = date('w', $start) > 0 ? 7 - date('w', $start) : 0; 

    $date = $start + (ONE_DAY * $days_until_sunday); 
    $sundays = array(); 
    while ($date <= $end) { 
        array_push($sundays, $date); 
        $date += (7 * ONE_DAY); 
    } 
    return $sundays; 
} 

// Calculate some example dates. Today, and 30 days from now 
$start = time($start); 
$end = time($end) + (30 * ONE_DAY); 
echo ONE_DAY;
echo "<br/>";
 $count=0;
// Loop and output Y-m-d 
foreach (sundays_in_range($start, $end) as $sunday)
{
print "<option>".date("Y-m-d", $sunday)."</option><br/>";
 $count++;
 }

echo  $count;
?> 
-1
ответ дан 1 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: