funzioni per calcoli sulle date

stefanone69

Nuovo Utente
11 Giu 2013
9
0
0
Non sono uno sviluppatore professionista e quando mi trovo difronte ad un muro me la cavo con i 'sotterfugi':cool:
Quello che vorrei sapere da tutti voi GURU... possibile che alla versione 5 o più del PHP non esistono funzioni "funzionanti!" per gestire le date ed i calcoli su di esse?
Quello che dovevo ottenere era:
da una data qualsiasi ottieni il lunedi della stessa settimana.
Io ci sono riuscito cosi:
PHP:
  <?php

// recupero id dell'agente e giorno dall'url e trovo il lunedi
      $id = $_GET['id'];
     $giorno = $_GET['giorno'];
     
  //$g giorno $m mese $a anno   
     list($g, $m, $a) = explode('/',$giorno);
        $unixd = mktime(0, 0, 0, $m, $g, $a);

//giorno della settimana $gset
      $gset=date('w', $unixd);
        if ($gset == "0") {
        $gset = "7";
        }
        $gset = $gset - 1;
        // cerco lunedi... se $g-$gset>0 non devo fare altro
  $gver = $g - $gset;
    if ($gver>0) {

                 $gl = $gver;
                 $ml = $m;
                 $al = $a;
                }
                else
                {
// giorni del mese $ngm precedente
 if ($m>1){
        $ml = $m-1;
        $unixd = mktime(0, 0, 0, $ml, $g, $a);
        $ngm = date('t', $unixd);
        $gl = $g + $ngm - $gset;
        $al = $a;
 }
 else {
        $al=$a-1;
        $ml = "12";
        $unixd = mktime(0, 0, 0, $ml, $g, $al);
        $ngm = date('t', $unixd);
        $gl = $g + $ngm - $gset ;
 }                        
                }
        $lunedi = $al."-".$ml."-".$gl;
        $lunedit =  $gl."/".$ml."/".$al;
ma c'era un metodo più veloce?
 
Cioa, puoi provare con la funzione strtotime()
PHP:
echo date("d/m/Y",strtotime("previous monday"));
prevede un secondo parametro per passare la data se omesso ti restituisce il lunedi della settiamna corrente
 
ciao
se non ho capito male quello che vuoi fare
PHP:
<?php
/*
per fare il test commenta e decommenta una riga del giorno
*/
$giorno="10/04/2016";//domenica => 11/04/2016
//$giorno="11/04/2016";//lunedì => 11/04/2016
//$giorno="13/04/2016";//mercoledì => 11/04/2016
//$giorno="16/04/2016";//sabato => 11/04/2016
//$giorno="17/04/2016";//domenica => 18/04/2016
list($g, $m, $a) = explode('/',$giorno);
$unixd = mktime(0, 0, 0, $m, $g, $a);
$gset=date('w', $unixd);
$sottrarre=$gset-1;
$unixd = mktime(0, 0, 0, $m, abs($g-$sottrarre), $a);
$lunedi=date("d/m/Y",$unixd);
echo "$giorno<br>";
echo "$lunedi<br>";
?>
 
Prima di tutto vorrei ringraziarvi: siete veramente molto gentili e disponibili.
Per quanto riguarda le info che mi avete mandato complimenti! Ho cercato tanto sul web ma non si trova nulla che descrive queste funzioni...

PHP:
strtotime("previous monday")
è eccezionale praticamente quello di cui avevo bisogno! Funziona sempre o il server deve avere dei requisiti particolari in configurazione?

PHP:
mktime(0, 0, 0, $m, abs($g-$sottrarre), $a)
questa se nn erro l'avevo provata ma o per un errore mio o per una configurazione del server non sono riuscito a farla funzionare.
 

Discussioni simili