Conti giorni e mese

z.cristiano

Utente Attivo
16 Giu 2007
145
0
16
Salve a tutti...

Vorrei fare un calcolo che mi sembra un pò complicato..

Allora, se selezionassi ogni mese fino a dicembre 2012, come si fa a calcolare automaticamente a partire da questo mese

01/04/2012
01/05/2012
01/06/2012
01/07/2012
01/08/2012
01/09/2012
01/10/2012
01/11/2012
01/12/2012

Mentre, se selezionassi ogni 14 giorni, come si fa? Tipo, a partire da questo giorno

Dal 05/04/2012 al 18/04/2012
Dal 19/04/2012 al 02/05/2012
Dal .... al ...
fino a dicembre 2012?
 
Prova questa funzione:
PHP:
<?php
function getIntervals(DateTime $startDate, DateTime $endDate, DateInterval $interval)
{
    while (true) {
        $startDate->add($interval);

        if ($startDate->getTimestamp() > $endDate->getTimestamp()) {
            break;
        }

        $dates[] = $startDate->getTimestamp();
    }

    $dates = array_map(function($time) {
        return date('d/m/Y', $time);
    }, $dates);

    return $dates;
}
?>
Questo script:
PHP:
print_r(getIntervals(
    new DateTime(date('01-m-Y')),
    new DateTime('31-12-2012'),
    DateInterval::createFromDateString('14 days'))
);
print_r(getIntervals(
    new DateTime(date('01-m-Y')),
    new DateTime('31-12-2012'),
    DateInterval::createFromDateString('1 month'))
);
Stampa a video:
Codice:
Array
(
    [0] => 15/04/2012
    [1] => 29/04/2012
    [2] => 13/05/2012
    [3] => 27/05/2012
    [4] => 10/06/2012
    [5] => 24/06/2012
    [6] => 08/07/2012
    [7] => 22/07/2012
    [8] => 05/08/2012
    [9] => 19/08/2012
    [10] => 02/09/2012
    [11] => 16/09/2012
    [12] => 30/09/2012
    [13] => 14/10/2012
    [14] => 28/10/2012
    [15] => 11/11/2012
    [16] => 25/11/2012
    [17] => 09/12/2012
    [18] => 23/12/2012
)
Array
(
    [0] => 01/05/2012
    [1] => 01/06/2012
    [2] => 01/07/2012
    [3] => 01/08/2012
    [4] => 01/09/2012
    [5] => 01/10/2012
    [6] => 01/11/2012
    [7] => 01/12/2012
)
 
ciao
ti do un esempio

PHP:
<?php
$data_partenza="19/04/2012";
//la data deve essere trasformata in formato anglosassome mm/gg/yy
$de=explode("/",$data_partenza);
$d_p=$de[1]."/".$de[0]."/".$de[2];
//calcolo il timestamp della data
$d_p_timestamp=strtotime($d_p);//espresso in secondi
$add_gg=14;//giorni da aggiungere
//aggiungo i giorni in secondi =($add_gg  meno 1) per 24 ore per 6o minuti per 60 secondi
$d_a_timestamp=$d_p_timestamp+(($add_gg-1)*24*60*60);
//converto la data ottenuta in formato umano
$data_arrivo=date("d/m/Y",$d_a_timestamp);
echo "dal $data_partenza al $data_arrivo<br>";
?>
 
Funziona, ma una domanda non riesco a fare una cosa...

Come si fa a sapere quante settimane sono partendo a questo giorno?
In senso che, se scrivo la data di oggi 05/04/2012 fino al 31/12/2012 quante settimane sono?

Faccio un'esempio, oggi è il 05/04/2012 e fino al 31/12/2012 sono 30 settimane e faccio il calcolo dal giorno al giorno a settimana fino al 31/12/2012 e sarebbe
dal 05/04/2012 al 12/04/2012
dal 12/04/2012 al 19/04/2012 e prosegue la lista fino a fine dicembre...

come si fa? Uso date("W") ma non funziona..
 
Quale dei due stai usando? Il mio o quello di borgo?

Per calcolarlo, comunque, prova così:
PHP:
<?php
function getWeek()
{
    $week = ceil(date('d') / 7);

    if ($week < 1) {
        $week = 1;
    }
}
?>
 
Ultima modifica:
Una classe apposita che sottopongo al vostro giudizio

PHP:
class datCal
{ 
 public function crea_calendario($data_inizio,$data_fine,$limit){
	list($anno,$mese,$giorno) = explode("-",$data_inizio);
	$differenza = round((strtotime($data_fine) - strtotime($data_inizio))/(86400));
	for ($i = $limit; $i <= $differenza; $i++) {
		$data_per_calendario = date("Y-m-d",mktime(0,0,0,$mese,$giorno+$i,$anno));
		$date_per_calendario[] =  $data_per_calendario;
 	}
	return $date_per_calendario;
 }
}
 
Funziona, ma una domanda non riesco a fare una cosa...

Come si fa a sapere quante settimane sono partendo a questo giorno?
In senso che, se scrivo la data di oggi 05/04/2012 fino al 31/12/2012 quante settimane sono?

Faccio un'esempio, oggi è il 05/04/2012 e fino al 31/12/2012 sono 30 settimane e faccio il calcolo dal giorno al giorno a settimana fino al 31/12/2012 e sarebbe
dal 05/04/2012 al 12/04/2012
dal 12/04/2012 al 19/04/2012 e prosegue la lista fino a fine dicembre...

come si fa? Uso date("W") ma non funziona..
Per la differerenza in settimane dai uno sguardo a questo tutorial
 
ciao
piccola intromissione aggiuntiva.
secondo me usare le date in formato umano (italiano o albionico) è una mania controproducente.
se si usano le date in formato timestamp si facilitano enormemente i calcoli e i confronti
l'unica accortezza è trasformare in timestamp le date provenienti da input di un form, poi si fanno senza problemi tutti i calcoli
PHP:
<?php
//se le date sono in timestamp
$giorni_tra=($data_2-$data_1)/(24*3600);//eventualmente arrotondando
$settimane_tra($data_2-$data_1)/(7*24*3600);
//e volendo semplicemente ricavare settimane giorni ore minuti e secondi
//con divisioni intere e resto
//poi per visualizzare/stampare (è l'unico momento in cui serve) eventualmente una data in umano
echo "tra il ".date("d/m/Y",$data_1)."e il ".date("d/m/Y",$data_2)." ci sono $giorni_tra giorni";//o settimane e volendo la formattazione della data come si vuole
?>
 
Ce l'ho fatta...
SOno riuscito a mettere quante settimane sono a partire oggi fino al 31 dicembre e vorrei sapere come si fa poi a dividere?

Cioè, esempio sono 52 settimane, come faccio a dividere percependo dal giorno al giorno? Tipo

la prima settimana è dal 05/04/2012 al 12/04/2012
la seconda è dal 12/04/2012 al 19/04/2012
la terza......etc..
 
Quale metodo hai usato? Mostraci il codice per poterlo modificare.
 
Ultima modifica:
ciao
piccola intromissione aggiuntiva.
secondo me usare le date in formato umano (italiano o albionico) è una mania controproducente.
se si usano le date in formato timestamp si facilitano enormemente i calcoli e i confronti

Usi il TIMESTAMP anche per memorizzare il dato su DB?
 
Ecco

Usando questo codice con 52 settimane

PHP:
$numWeeks_ok = range(1, 52);


foreach($numWeeks_ok as $ognimese)
{
	
echo date("Y-m-d", mktime(0, 0, 0, date("m"), date("d", strtotime("+ ". $ognimese ." week")), date("Y")))

}

FUnziona ma errato, visualizza tutto la data con il mese 04, cioè esempio
05/04/2012 -> 12/04/2012 -> 19/04/2012 -> 26/04/2012 -> 03/04/2012 (ripete sempre 04 che sarebbe aprile) perchè? cosa c'è di errore?
 
Ultima modifica di un moderatore:

Discussioni simili