C colomber Utente Attivo 4 Dic 2012 232 1 18 9 Giu 2013 #1 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
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
criric Super Moderatore Membro dello Staff SUPER MOD MOD 21 Ago 2010 5.607 54 48 TN 9 Giu 2013 #2 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
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
C colomber Utente Attivo 4 Dic 2012 232 1 18 9 Giu 2013 #3 mi da questo errore Fatal error: Call to undefined method DateTime::getTimestamp()
criric Super Moderatore Membro dello Staff SUPER MOD MOD 21 Ago 2010 5.607 54 48 TN 9 Giu 2013 #4 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
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
C colomber Utente Attivo 4 Dic 2012 232 1 18 10 Giu 2013 #5 ma non si può convertire 8 giugno in 8 june e 9 giugno in 9 june e poi fare il confronto?
criric Super Moderatore Membro dello Staff SUPER MOD MOD 21 Ago 2010 5.607 54 48 TN 10 Giu 2013 #6 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"); ?>
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"); ?>
borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD 4 Feb 2008 16.046 150 63 PR www.borgo-italia.it 10 Giu 2013 #7 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"); ?>
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"); ?>