Newsgroup: it.comp.www.php
Titolo: Scusate se lo chiedo: formato date?????

Allora, innanzitutto mi scuso se posto questa domanda perché mi sono reso
conto che l'hanno fatta già in molti ma, credetemi, ho letto tutti (credo) i
post e non ho capito niente.
Il problema, immagino, è semplicissimo ma non per me che per la prima volta
mi cimento con php e mysql.
Estraendo dei dati da database visualizzo la data (campo tipo datetime) nel
modo 2003-12-06. Come faccio a visualizzarlo nel formato 06-12-2003? Vi
prego di tenere in considerazione il fatto che state parlando ad un perfetto
principiante. Molte risposte che ho letto sono senz'altro ottime ma partono
da un livello che io non raggiungo ancora.
Questo è quello che ho:
<?php
mysql_select_db($database_ConnessioneConcorsi, $ConnessioneConcorsi);
$query_RecordsetConcorsi = "SELECT * FROM concorsi ORDER BY Scadenza ASC";
$RecordsetConcorsi = mysql_query($query_RecordsetConcorsi,
$ConnessioneConcorsi) or die(mysql_error());
$row_RecordsetConcorsi = mysql_fetch_assoc($RecordsetConcorsi);
$totalRows_RecordsetConcorsi = mysql_num_rows($RecordsetConcorsi);
?>
e poi:
<?php echo $row_RecordsetConcorsi['Scadenza']; ?>
che mi visualizza la data nel modo americano.
Grazie in anticipo,
buona giornata a tutti voi.

 modo 2003-12-06. Come faccio a visualizzarlo nel formato 06-12-2003?
Nella query string usa:
date_format(Scadenza, "%d-%m-%Y") as data_scadenza
e poi
<?php echo $row_RecordsetConcorsi['data_scadenza']; ?>
Ciao.
-- 
Federico R.

 ha scritto nel messaggio
news:1cgvqyyobl9ri$.186gucdiiqat6.dlg@40tude.net...


 >
Salve,
lo devi inserire nella query string
SELECT *, date_format(Scadenza, "%d-%m-%Y") as data_scadenza ..... FROM ....
e poi te lo trovi in $row_RecordsetConcorsi['data_scadenza'];
se proprio non lo vuoi fare direttamente in mysql
php ha molte funzioni per le date
esempio
$row_RecordsetConcorsi['Scadenza']  = '2003-12-06';
 echo date('d-m-Y', strtotime($row_RecordsetConcorsi['Scadenza']));
 /* oppure */
 echo (strftime ("%d-%m-%Y",
strtotime($row_RecordsetConcorsi['Scadenza'])));
Saluti
Corrado Modica
www.pachinoglobale.com

 ha scritto nel messaggio
news:O2mAb.165199$hV.60...@news2.tin.it...

Ciao Corrado, ho provato e questi sono i risultati: SELECT ecc... non sono
riuscito a farlo funzionare, $row_RecordsetConcorsi['Scadenza'] ecc... e
echo (strftime ("%d-%m-%Y", ecc... funzionano ma in parte nel senso che la
data ora è divisa in dd,mm,aaaa ma invece, ad esempio, di 07-12-2003 viene
fuori 20-12-2007 (!!!)
Dov'è che sbaglio?
P.S. ho dato un'occhiata al tuo sito. L'ho trovato molto interessante,
almeno per un siciliano come me.
Ciao

 riuscito a farlo funzionare, $row_RecordsetConcorsi['Scadenza'] ecc...
Ciao GB,
nella mia prima risposta effettivamente sono stato un po' conciso.
Prova a sostituire la tua query string
$query_RecordsetConcorsi = "SELECT * FROM concorsi ORDER BY Scadenza
ASC";
con:
$query_RecordsetConcorsi = 'select *, date_format(Scadenza, "%d-%m-%Y")
as data_scadenza from concorsi order by data_scadenza asc';
Poi dove ti serve la data usi:
$row_RecordsetConcorsi['data_scadenza'] <- usa l'alias 'data_scadenza'
non il nome del campo.
Ciao.
-- 
Federico R.

 Federico R.
Ciao Federico, ti ringrazio per l'aiuto che mi stai fornendo. Ho provato a
seguire il tuo consiglio e ci siamo, funziona ma... c'é un altro problema:
solo se inserisco i dati via phpmyadmin le date vengono visualizzate nel
modo corretto. Se le inserisco con il form che ho preparato io la
visualizzazione di una data come 10-12-2003 č 20-12-2010. Confesso che non
ci sto capendo proprio niente. Ho provato a leggere guide e manuali vari
online (ecco perché non mi sono fatto sentire piů, volevo evitare di
disturbare ancora) ma non ho trovato niente che, a prima vista, potesse fare
al caso mio.
Puň essere che il problema stia qui? :
GetSQLValueString($HTTP_POST_VARS['Scadenza'], "date")
Spero che anche questa volta saprai, potrai e vorrai aiutarmi.
Grazie

 GetSQLValueString($HTTP_POST_VARS['Scadenza'], "date")
 
Ho cercato nel manuale, ma GetSQLValueString() non sembra essere una
funzione del php per cui non sapendo che fa non so che dirti :-)
Ciao.
-- 
Federico R.


Aspetta, ti posto il codice completo, cosě vedi un po' se ho fatto casini:
********************************************************
<?php require_once('../Connections/ConnessioneConcorsi.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",
$theNotDefinedValue = "")
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" :
"NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue :
$theNotDefinedValue;
      break;
  }
  return $theValue;
}
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'];
if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $editFormAction .= "?" . $HTTP_SERVER_VARS['QUERY_STRING'];
}
if ((isset($HTTP_POST_VARS["MM_insert"])) && ($HTTP_POST_VARS["MM_insert"]
== "form1")) {
  $insertSQL = sprintf("INSERT INTO concorsi (NumeroPosti, Scadenza, Ente,
Descrizione, Fonte, Data_inserimento) VALUES (%s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($HTTP_POST_VARS['NumeroPosti'],
"int"),
                       GetSQLValueString($HTTP_POST_VARS['Scadenza'],
"date"),
                       GetSQLValueString($HTTP_POST_VARS['Ente'], "text"),
                       GetSQLValueString($HTTP_POST_VARS['Descrizione'],
"text"),
                       GetSQLValueString($HTTP_POST_VARS['Fonte'], "text"),
GetSQLValueString($HTTP_POST_VARS['Data_inserimento'], "date"));
  mysql_select_db($database_ConnessioneConcorsi, $ConnessioneConcorsi);
  $Result1 = mysql_query($insertSQL, $ConnessioneConcorsi) or
die(mysql_error());
  $insertGoTo = "ConcorsoInserito.php";
  if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
?>
<html>
<body>
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  <table align="center">
    <tr valign="baseline">
      <td nowrap align="right">Numero Posti:</td>
      <td><input type="text" name="NumeroPosti" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Scadenza:</td>
      <td><input type="text" name="Scadenza" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">Ente:</td>
      <td><input type="text" name="Ente" value="" size="32"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right" valign="top">Descrizione:</td>
      <td> <textarea name="Descrizione" cols="50" rows="5"></textarea>
      </td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right" valign="top">Fonte</td>
      <td><input name="Fonte" type="text" id="Fonte"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right" valign="top">&nbsp;</td>
      <td><input name="Data_inserimento" type="hidden"
id="Data_inserimento"></td>
    </tr>
    <tr valign="baseline">
      <td nowrap align="right">&nbsp;</td>
      <td><input type="submit" value="Inserisci record"></td>
    </tr>
  </table>
  <input type="hidden" name="MM_insert" value="form1">
</form>
*********************************
Ciao e grazie ancora

 id="Data_inserimento"></td>
Non inserisci nessuna data visto che al campo hidden "Data_inserimento"
non viene assegnato alcun valore tramite l'attributo value="".
Prova cosě:
<td><input name="Data_inserimento" type="hidden" value="<?php echo
date("Y-m-d"); ?>" id="Data_inserimento"></td>
Ciao.
-- 
Federico R.


Ehm, no, quello è un altro discorso. Il campo che interessa a me è
<input type="text" name="Scadenza" value="" size="32">
Considera che il campo database mysql è del tipo "date".
Utilizzando quel tipo di input e la visualizzazione che mi hai suggerito tu
ottengo date sballate.
Ciao (anzi, buonanotte, vista l'ora)

 ottengo date sballate.
Se nel campo Scadenza metti, per esempio 2003-12-11, nel database la
data come viene memorizzata?
Ciao.
-- 
Federico R.

 data come viene memorizzata?
Buongiorno,
Cosģ va bene. Inserendo 2003-12-11, la data viene poi visualizzata come
11-12-2003. Ma questo posso farlo io, un utente medio vorrą scrivere la data
nel formato italiano. Che si fa?
Ciao

 nel formato italiano. Che si fa?
Ok, intanto abbiamo appurato che il codice fa quello che deve fare :-)
Purtroppo a priori non si può sapere cosa farà l'utente, direi quindi
che ci sono le seguenti strade:
1. Scrivi accanto al campo in quale formato deve essere inserita la data
(per esempio gg/mm/aaaa). Poi la controlli e se è nel formato giusto la
trasformi nel formato aaaa-mm-gg e la memorizzi (a questo scopo ti può
essere utile la funzione explode()), altrimenti avvisi l'utente che il
formato della data non va bene.
2. Suddividi in tre campi l'inserimento della data: uno per il giorno,
uno per il mese ed uno per l'anno. Poi assembli la data nel formato
giusto per memorizzarla nel database.
Ora come ora non mi vengono in mente altri metodi.
Ciao.
-- 
Federico R.

Ciao Federico, ti ho lasciato un po' in pace perché ho studiato un pochino.
Adesso ti scrivo perché mi sembra doveroso ringraziarti. Ho risolto il
problema, in un modo un po' diverso da quello che mi hai indicato, ma le tue
indicazioni sono state molto importanti (e, devo dire, anche quelle di altri
utenti di questo e altri newsgroup). Appena terminerò il sito ti ringrazierò
pubblicamente ;-)
Ciao

 nel formato italiano. Che si fa?
Guarda se ti puň essere utile questa funzioncina, GetInputDate($miadata,$formato)
che traduce l'input dell'utente medio italiano nel formato che vuoi tu.
La variabile $formato č il formato che desideri secondo la sintassi della funzione
date(), mentre $miadata č quella che ti passa l'utente. La puoi usare ad esempio
cosě:
	$myDataDocumento = GetInputDate($_POST["DataDocumento"],"Ymd") ;
e poi passi '$myDataDocumento' alla query di MySQL.
La funzione accetta input del tipo:
5/4/1997 -> 5 aprile 1997
6.4      -> 6 aprile dell'anno corrente
2 3 4    -> 2 marzo 2004
3 dec    -> 3 dicembre dell'anno corrente
4 mag 20 -> 4 maggio 1920
5        -> 5 del mese corrente dell'anno corrente
o        -> oggi
La sequenza dell'utente č giorno-mese-anno, se manca l'anno prende l'anno corrente
e se manca il mese quello corrente. Il giorno č obbligatorio, puoi mettere comunque
la lettera "o" (oggi) per la data corrente.
Per i mesi, se non sono in numeri, sono sufficienti solo tre lettere (sia italiano
che inglese), quelle oltre non vengono considerate, per cui si puň scrivere anche
ottembre->"ott"->ottobre, auguri->"aug"->agosto, jane->"jan"->gennaio.
I separatori possono essere i caratteri " " (spazio), "." (punto),
"/" (slash) e "-" (meno o trattino).
La funzione č ancora incompleta, vorrei metterci "i" per ieri e "d" per domani,
e non č il massimo della programmazione, comunque sembra funzionare. Eccola:
function GetInputDate($miadata,$formato)
{
   $arrayMese =  array("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic",
                        "jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
   $dimArrayMese = sizeof($arrayMese);
   list ($giorno,$mese,$anno) = split("[\ /.-]", trim($miadata));
   setlocale(LC_TIME,"it_IT");
   $dataoggi =  time();
   // verifica anno
   if (isset($anno))
   {
     $anno = abs($anno) % 10000 ; // cosě ho da 0 a 9999
     if ($anno <= 9)
     {
       $anno += 2000;
     }
     elseif ($anno <= 99)
     {
       $anno += 1900;
     }
   }
   else
   {
     $anno = date ("Y",$dataoggi) * 1;
   }
   // verifica mese
   if (isset($mese))
   {
     if (($mese<1) || ($mese>12))
     {
       $mese = substr(strtolower($mese) . "   ",0,3);
       for ($i = 0 ; $i < $dimArrayMese ; $i++)
       {
         if ($mese == $arrayMese[$i])
         {
           $mese = $i % 12 + 1 ;  break;
         }
       }
       if ($i==$dimArrayMese)
       {
         return "" ;  // NON VALIDO
       }
     }
   }
   else
   {
     $mese = date ("m",$dataoggi) * 1;
   }
   if ( ($giorno=="o") || ($giorno == "O") || ($giorno == "t") || ($giorno == "T"))
   {
     $giorno = date ("d",$dataoggi) * 1;
   }
   // verifica giorno
   if (($giorno>=1) && ($giorno<=31))
   {
     if (  (($giorno == 31) && ($mese == 11 || $mese == 4 || $mese == 6 || $mese == 9))
       ||  (($mese == 2) && ($giorno>29))  )         // manca ancora gestione anni bisestili
     {
       return "" ;
     }
   }
   else
   {
     return "" ;
   }
   if (!checkdate($mese,$giorno,$anno))  return "";
   return date($formato,mktime(0,0,0,$mese,$giorno,$anno,0));
}
Bye
gp
-- 
http:/
gpbizzaro.supereva.it/index.html