Confronto tra due date in italiano

  • Creatore Discussione Creatore Discussione colomber
  • Data di inizio Data di inizio

colomber

Utente Attivo
4 Dic 2012
232
1
18
ho due date in italiano:

8 giugno

9 giugno


devo confrontarle e il risultato deve essere che 9 giugno è maggiore di 8 giugno come faccio?


grazie
 
devi prima trasformare quella stringa in una data valida per php e poi usare il timestamp per confrontarle
puoi provare cosi
PHP:
<?php

function formatta_data($data) {

    $mesi = array('gennaio' => '01', 'febbraio' => '02', 'marzo' => '03',
        'aprile' => '04', 'maggio' => '05', 'giugno' => '06',
        'luglio' => '07', 'agosto' => '08', 'settembre' => '09',
        'ottobre' => '10', 'novembre' => '11', 'dicembre' => '12');

    $split = explode(" ", $data);

    return date('Y') . "-" . $mesi[$split[1]] . "-" . str_pad($split[0], 2, '0', STR_PAD_LEFT);
}

function confronto_date($data1, $data2) {
    $d1 = new DateTime(formatta_data($data1));
    $d2 = new DateTime(formatta_data($data2));
    if ($d1->getTimestamp() > $d2->getTimestamp()) {
        return $data1;
    }
    return $data2;
}

echo confronto_date("9 giugno", "8 giugno");
?>
basta che la stringa abbia sempre la stessa struttura
 
mi da questo errore


Fatal error: Call to undefined method DateTime::getTimestamp()
 
sembra che tu non abbia una versione aggiornata di php vedi il manuale
in alternativa puoi usare la funzione mktime che ti restituisce sempre il timestamp
 
ma non si può convertire 8 giugno in 8 june e 9 giugno in 9 june e poi fare il confronto?
 
non conosco funzioni php che fanno calcoli su una data in formato stringa, se esistono ben venga
lo stesso esempio con mktime()
PHP:
<?php

function formatta_data($data) {

    $mesi = array('gennaio' => '01', 'febbraio' => '02', 'marzo' => '03',
        'aprile' => '04', 'maggio' => '05', 'giugno' => '06',
        'luglio' => '07', 'agosto' => '08', 'settembre' => '09',
        'ottobre' => '10', 'novembre' => '11', 'dicembre' => '12');

    $split = explode(" ", $data);

    return date('Y') . "-" . $mesi[$split[1]] . "-" . str_pad($split[0], 2, '0', STR_PAD_LEFT);
}

function confronto_date($data1, $data2) {

    $d1 = explode("-", formatta_data($data1));
    $d2 = explode("-", formatta_data($data2));

    $x1 = mktime(0, 0, 0, $d1[1], $d1[2], $d1[0]);    
    $x2 = mktime(0, 0, 0, $d2[1], $d2[2], $d2[0]);

    if ($x1 > $x2) {
        return $data1;
    }
    return $data2;
}

echo confronto_date("9 giugno", "8 giugno");
?>
 
ciao
puoi provare anche così
PHP:
<?php
function confronto_date($data1, $data2) {
	$mesi = array('gennaio' => '01', 'febbraio' => '02', 'marzo' => '03',
                'aprile' => '04', 'maggio' => '05', 'giugno' => '06',
                'luglio' => '07', 'agosto' => '08', 'settembre' => '09',
                'ottobre' => '10', 'novembre' => '11', 'dicembre' => '12');
	$split1 = explode(" ", $data1);
	$split2 = explode(" ", $data2);
	//le seguenti due righe calcolano il timestamp confrontando i due interi
	$d1=mktime(0,0,0,$mesi[$split1[1]],str_pad($split1[0], 2, '0', STR_PAD_LEFT),date('Y'));
	$d2=mktime(0,0,0,$mesi[$split2[1]],str_pad($split2[0], 2, '0', STR_PAD_LEFT),date('Y'));
	/*oppure queste due confrontando le stringhe formattate YY-mm-dd
	$d1=date('Y') . "-" . $mesi[$split1[1]] . "-" . str_pad($split1[0], 2, '0', STR_PAD_LEFT);
	$d2=date('Y') . "-" . $mesi[$split1[1]] . "-" . str_pad($split2[0], 2, '0', STR_PAD_LEFT);
	secondo me puoi usare o uno dei due metodi indifferentemente
	*/
	if($d1>$d2){
		return "$data1 ".date('Y');//se non ti serve l'anno togli il .date('Y')
	}else{
		return "$data2 ".date('Y');
	}
}
echo confronto_date("9 giugno", "18 giugno");
?>
 

Discussioni simili