Come posso calcolare il numero di sabati e domeniche tra due date in php?Calcolo del numero di sabati e domeniche
Esiste qualche funzione incorporata a tale scopo?
Come posso calcolare il numero di sabati e domeniche tra due date in php?Calcolo del numero di sabati e domeniche
Esiste qualche funzione incorporata a tale scopo?
C'è una questione connessa già qui, Calculate business days
È possibile utilizzare questo per sottrarre da 7 per ottenere i giorni del fine settimana, o simili.
Non credo che v'è una costruito in per questo, ma questo dovrebbe fare il lavoro:
$startTime = START_TIMESTAMP;
$endTime = END_TIMESTAMP;
$time = $startTime;
$count = 0;
while(date('w', $time) != 0) { // 0 (for Sunday) through 6 (for Saturday)
$time += 86400;
}
while($time < $endTime) {
$count++;
$time += 7 * 86400;
}
cosa succede se timestamp in startdate arriva sabato – nik
Funziona anche, 'date ('w', $ time) == 0' quindi vai al secondo mentre' $ count ++ ' , hai almeno un sabato. –
Invece di "while (date ('w', $ time)! = 0)' puoi semplicemente fare '$ time = strtotime (" Saturday ")' o '$ time = strtotime (" Sunday ")'. –
<?php
date_default_timezone_set("Europe/Lisbon");
$d1 = new DateTime("2009-06-01"); /* inclusive */
$d2 = new DateTime("2009-07-01"); /* exclusive */
$interval = $d2->diff($d1);
$number_of_days = $interval->format("%d");
$number_of_weekends = $number_of_days/7;
$remainder = $number_of_days % 7;
if ($remainder >=2 && $d1->format("D") == "Sat")
$number_of_weekends++;
elseif ($d1->format("w") + $remainder >= 8)
$number_of_weekends++;
Potrei essermi perso per uno nell'ultima condizione, assicuratevi di controllarlo con date di inizio differenti. (Sentiti libero di modificare questa risposta se riscontri un errore).
c'è sicuramente nessuna funzione incorporata per questo, ma è possibile utilizzare strtotime loop giorni
$start = strtotime('2010-01-01');
$end = strtotime('2010-01-09');
function numWeekdays($start_ts, $end_ts, $day, $include_start_end = false) {
$day = strtolower($day);
$current_ts = $start_ts;
// loop next $day until timestamp past $end_ts
while($current_ts < $end_ts) {
if(($current_ts = strtotime('next '.$day, $current_ts)) < $end_ts) {
$days++;
}
}
// include start/end days
if ($include_start_end) {
if (strtolower(date('l', $start_ts)) == $day) {
$days++;
}
if (strtolower(date('l', $end_ts)) == $day) {
$days++;
}
}
return (int)$days;
}
echo numWeekDays($start, $end, 'saturday', false);
Facciamo tutto Kiss (Keep It Simple Stupid). Perché renderlo così complicato?
function countWeekendDays($start, $end)
{
// $start in timestamp
// $end in timestamp
$iter = 24*60*60; // whole day in seconds
$count = 0; // keep a count of Sats & Suns
for($i = $start; $i <= $end; $i=$i+$iter)
{
if(Date('D',$i) == 'Sat' || Date('D',$i) == 'Sun')
{
$count++;
}
}
return $count;
}
Ho cercato per un po 'per una semplice soluzione che ha funzionato e ha deciso di scrivere la mia e si avvicinò con questo
$start = date('Y-m-d');
$end = date('Y-m-d', strtotime($start.' +1 year'));
$current = $start;
$count = 0;
while($current != $end){
if(date('l', strtotime($current)) == 'Saturday'){
$count++;
}
$current = date('Y-m-d', strtotime($current.' +1 day'));
};
echo $count;
possibile duplicato del [Calcola giorni lavorativi] (http://stackoverflow.com/questions/336127/calculate-business-days) –