<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>&#60;?phpMonster</title>
	<atom:link href="http://www.phpmonster.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpmonster.org</link>
	<description>Tips and Tricks all&#039; italiana!</description>
	<lastBuildDate>Sun, 25 Dec 2011 01:23:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>EasyPHP e i virtual hosts</title>
		<link>http://www.phpmonster.org/blog/apache/easyphp-e-i-virtual-hosts/</link>
		<comments>http://www.phpmonster.org/blog/apache/easyphp-e-i-virtual-hosts/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 23:17:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WAMP/Apache]]></category>

		<guid isPermaLink="false">http://www.phpmonster.org/?p=77</guid>
		<description><![CDATA[EasyPHP è uno strumento indispensabile e quelle persone che necessitano di dover avere a disposizione una suite completa di sviluppo siti in PHP. Fa parte della famiglia delle WAMP, acronimo di Windows, Apache, MySQL e PHP. Ovviamente ne esistono anche altri di software WAMP, tra cui il più conosciuto forse è XAMPP, ma noi oggi [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.easyphp.org/" target="_blank">EasyPHP</a> è uno strumento indispensabile e quelle persone che necessitano di dover avere a disposizione una suite completa di sviluppo siti in PHP.</p>
<p>Fa parte della famiglia delle WAMP, acronimo di <strong>W</strong>indows, <strong>A</strong>pache, <strong>M</strong>ySQL e <strong>P</strong>HP. Ovviamente ne esistono anche altri di software WAMP, tra cui il più conosciuto forse è<a href="http://www.apachefriends.org/en/xampp.html" target="_blank"> XAMPP</a>, ma noi oggi vogliamo concentrarci su <strong>EasyPHP</strong>,  progetto continuamente aggiornato che segue con molta scrupolosità le varie versioni di PHP che si stanno succedendo, così da  offrire una suite &#8216;sempre aggiornata&#8217;.</p>
<p>Capita di dover lavorare con piattaforme di blogging, CMS  o e-commerce che necessitano di essere calibrare e configurate in locale, per poi essere pubblicate sul domino di riferimento. Se prendiamo ad esempio wordpress, questi archivia i propri post utilizzando i link <strong>assoluti</strong> , il che rappresenta un problema per chi passa da un ambiente di sviluppo alla produzione.</p>
<p>E quindi?</p>
<p>E quindi ecco come risolvere con EasyPHP i fastidiosi problemi di migrazione da locale a produzione e viceversa, lasciando inalterati i link assoluti e potendo contare su una situazione il più vicina possibile a quella che si presenterà on line.</p>
<p>Andiamo con ordine:</p>
<p>Per chi no lo avesse fatto, scarichiamo l&#8217; <a href="http://www.easyphp.org/save-easyphp-5380.php" target="_blank">ultima versione aggiornata di EasyPHP </a>(ad oggi la 5.3.8) e la installiamo sul nostro pc nella cartella <code>C:/EasyPHP</code>. Sono circa 20Mb, dove troveremo appunto tutto quello che ci serve per avere un ambiente di sviluppo.</p>
<p>Una volta avviato, e selezionata la nostra lingua di riferimento, apriamo la classica finestra di EasyPHP con un doppio click sull&#8217; icona nella barra delle applicazioni</p>
<p><a href="http://www.phpmonster.org/wp-content/uploads/2011/10/step_1.jpg"><img class="alignnone size-full wp-image-91" title="step_1" src="http://www.phpmonster.org/wp-content/uploads/2011/10/step_1.jpg" alt="" width="195" height="194" /></a></p>
<p>e scegliamo di configurare apache.</p>
<p><a href="http://www.phpmonster.org/wp-content/uploads/2011/10/step_2.jpg"><img class="alignnone size-medium wp-image-92" title="step_2" src="http://www.phpmonster.org/wp-content/uploads/2011/10/step_2-300x185.jpg" alt="" width="300" height="185" /></a></p>
<p>una volta aperto il file (il cui path reale sarà<code> C:\EasyPHP\conf_files\httpd.conf</code>),</p>
<p>cambiate la riga 49 come segue:</p>
<pre>Listen 0.0.0.0:80</pre>
<p>In questo modo il server WAMP locale acquisirà l&#8217; IP che ha il vostro pc in quel momento</p>
<p>Alla riga 131 del  file abilitate (togliendo il simbolo #) il modulo apache <code>mod_vhost_alias.so</code></p>
<p>Infine aggiungete alla riga 1016 o 1017 la seguente riga</p>
<pre>
Include conf/extra/httpd-vhosts.conf
</pre>
<p>In questo file creeremo i veri virtual host.</p>
<p>&nbsp;</p>
<h3>Creazione del virtual host</h3>
<p>&nbsp;</p>
<p>aprendo il file <code>C:\EasyPHP\apache\conf\extra\httpd-vhosts.conf</code><br />
ci troviamo davanti a quello che sarà un file incluso di apache in cui potremo configurare tutti i virtual hosts che decidiamo di creare. E&#8217; importante notare che un virtual host, per funzionare correttamente, deve essere accompagnato da altre informazioni che andranno scritte in un file di sistema di windows, il fatidico <em>file hosts</em>.</p>
<p>Non voglio entrare nei dettagli perchè sarebbe un lunghissimo discorso, ma tagliando la testa al toro ecco una configurazione base di un virtual host</p>
<p>Innanzitutto ridiamo la possibilità ad EasyPHP di accedere al famoso e classico localhost</p>
<pre>
&lt;VirtualHost *:80&gt;
ServerName localhost
DocumentRoot "C:\PHP\www"
ErrorLog "logs/error.localhost.log"
CustomLog "logs/access.localhost.log" common
&lt;Directory /&gt;
AllowOverride All
Order deny,allow
allow from all
&lt;/Directory&gt;
&lt;/VirtualHost *:80&gt;
</pre>
<p>Ed ora un virtualhost di esempio</p>
<pre>
&lt;VirtualHost *:80&gt;
ServerName miosito
DocumentRoot "C:\path\to\siteroot"
ServerAlias www.miuosito.ext miosito.ext
ErrorLog "logs/error.miuosito.ext.log"
CustomLog "logs/access.miuosito.ext.log" common
&lt;Directory /&gt;
AllowOverride All
Order deny,allow
allow from all
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>il file si commenta da se&#8230; cambiato C:\path\to\siteroot con il path ASSOLUTO della cartella del sito, e miosito con il nome del sito ed ext con la sua estensione.</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><strong>DOPO QUESTO PROCESSO E&#8217; NECESSARIO RIAVVIARE IL SERVER APACHE DI EASYPHP PER RENDERE EFFETTIVE LE MODIFICHE<br />
</strong></span></p>
<p style="text-align: left;">In ultimo, ma non per questo meno importante, bisogna modificare il hosts di windows affinchè ogni richiesta  indirizzata a quel dominio venga reindirizzata al computer locale. Questo influirà anche sul comportamento di tutti i browser  installati.</p>
<p style="text-align: left;">Apriamo il nostro file hosts in</p>
<p style="text-align: left;"><code>C:\Windows\System32\drivers\etc\hosts</code></p>
<p style="text-align: left;">e inseriamo questa riga</p>
<p style="text-align: left;"><code>127.0.0.1       www.miosito.ext</code></p>
<p style="text-align: left;">nel maggiore dei casi la modifica ha effetto istantaneo, viceversa basta aspettare pochi minuti (se non uno solo)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmonster.org/blog/apache/easyphp-e-i-virtual-hosts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>nomi di pagine SEO friendly</title>
		<link>http://www.phpmonster.org/blog/php/nomi-di-pagine-seo-friendly/</link>
		<comments>http://www.phpmonster.org/blog/php/nomi-di-pagine-seo-friendly/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 10:28:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP Experience]]></category>
		<category><![CDATA[create slug]]></category>
		<category><![CDATA[page slug]]></category>
		<category><![CDATA[seo slug]]></category>
		<category><![CDATA[slug]]></category>

		<guid isPermaLink="false">http://www.phpmonster.org/?p=72</guid>
		<description><![CDATA[Aspetto assolutamente NON TRASCURABILE : i nomi dell pagine html che il nostro sistema genera automaticamente. La funzione in qustione converte tutte le lettere accentate in lettere naturali ( è diventa e , ù diventa u ecc&#8230;) ed elimina tutte le punteggiature&#8230; in pratica un url pienamente compatibile con il WEB la funzione accetta 3 [...]]]></description>
			<content:encoded><![CDATA[<p>Aspetto assolutamente NON TRASCURABILE : i nomi dell pagine html che il nostro sistema genera automaticamente.</p>
<p>La funzione in qustione converte tutte le lettere accentate in lettere naturali ( è diventa e , ù diventa u ecc&#8230;) ed elimina tutte le punteggiature&#8230; in pratica un url pienamente compatibile con il WEB</p>
<p>la funzione accetta 3 parametri:</p>
<ul>
<li>la stringa da convertire</li>
<li>(opzionale) un array con gli eventuali caratteri da non tenere in considerazione, quindi rimpiazzati con uno spazio</li>
<li>il delimitatatore di parola (default &#8216;-&#8217; )</li>
</ul>
<p>ecco la funzione &#8230;.</p>
<p>&nbsp;</p>
<pre>
function to_slug($str, $replace=array(), $delimiter='-'){
    $str=trim((string)$str);
    $str=str_replace(array("\r","\n")," ",$str);
    if( !empty($replace) ){
        $str = str_replace((array)$replace, ' ', $str);
        }

    $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
    $clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
    $clean = strtolower(trim($clean, '-'));
    $clean = preg_replace("/[\/_|+ -]+/", $delimiter, $clean);

    return $clean;
    }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmonster.org/blog/php/nomi-di-pagine-seo-friendly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Una tabella `tableless`</title>
		<link>http://www.phpmonster.org/blog/css/una-tabella-tableless/</link>
		<comments>http://www.phpmonster.org/blog/css/una-tabella-tableless/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 00:43:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS Experience]]></category>
		<category><![CDATA[table html]]></category>
		<category><![CDATA[tableless]]></category>
		<category><![CDATA[tableless div]]></category>

		<guid isPermaLink="false">http://www.phpmonster.org/?p=65</guid>
		<description><![CDATA[Le tabelle HTML&#8230; queste sconosciute e, in alcuni casi , totalmente abbandonate dagli sviluppatori web! Personalmente le reputo mooolto comode e pratiche da gestire.. spiegatemi perchè non devono più esistere nei siti!! Ad ogni modo ecco una soluzione per avere a disposizione una tabella HTMl creata unicamente con css e div Qualcuno dirà sicuramente che [...]]]></description>
			<content:encoded><![CDATA[<p>Le tabelle HTML&#8230; queste sconosciute e, in alcuni casi , totalmente abbandonate dagli sviluppatori web!</p>
<p>Personalmente le reputo mooolto comode e pratiche da gestire.. spiegatemi perchè non devono più esistere nei siti!!</p>
<p>Ad ogni modo ecco una soluzione per avere a disposizione una tabella HTMl creata unicamente con css e div</p>
<p>Qualcuno dirà sicuramente che ho scoperto l&#8217;acqua calda&#8230; può essere! ma del resto,  se c&#8217;è sempre qualcuno più avanti di te, c&#8217;è sicuramente qualcuno più indietro di te!</p>
<p>Ecco il trick &#8230;</p>
<p>il css sfrutta esclusivamente l&#8217;attributo &#8216;display&#8217; che supporta i valori di</p>
<ul>
<li>table     <em>sarà il div che funge da table (tag &lt;table&gt;)</em></li>
<li>table-row <em>     sarà il div che fungerà da riga di tabell (tag &lt;tr&gt;)</em></li>
<li>table-cell     <em>sarà il div che fungerà da cella (tag &lt;td&gt;)</em></li>
</ul>
<p>Ecco quindi il codice css</p>
<pre>
/*tableless solution to obtain a table structure using divs*/
.table{display:table;border-collapse:collapse;width: 100%}
.table &gt; .table-row {display:table-row}
.table &gt; .table-row &gt; .table-cell{width:auto;display:table-cell;}
</pre>
<p>ed il codice HTML</p>
<pre>
&lt;div class=&quot;table&quot;&gt;
&lt;div class=&quot;table-row&quot;&gt;
&lt;div class=&quot;table-cell&quot;&gt;cella 1&lt;/div&gt;
&lt;div class=&quot;table-cell&quot;&gt;cella 2&lt;/div&gt;
&lt;div class=&quot;table-cell&quot;&gt;cella 3&lt;/div&gt;
&lt;div class=&quot;table-cell&quot;&gt;cella 4&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>L&#8217; annidamento dei div rispecchia esattamente quello di una tabella html, ma con una piccola eccezione:  nella tabella DIV non dobbiamo utilizzare l&#8217;attributo  &#8216;colspan&#8217; per ottenere lo stesso effetto che volevamo sulle tabelle HTML standard. Basterà semplicemente giocarsela con lo stile &#8216;width&#8217; !</p>
<p>Ma non bisogna perder la compatibilità e nel caso specifico di IE7 bisognerà correre ai ripari.</p>
<p>Con questo semplice fix css</p>
<pre>
&lt;!--[if IE 7]&gt;
&lt;style type="text/css"&gt;.table-cell{float: left}&lt;/style&gt;
&lt;![endif]--&gt;
</pre>
<p>si potrà rendere compatibile il nostro layout anche con IE7</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmonster.org/blog/css/una-tabella-tableless/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Date Converter</title>
		<link>http://www.phpmonster.org/blog/php/date-converter/</link>
		<comments>http://www.phpmonster.org/blog/php/date-converter/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 11:32:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP Experience]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[date converter]]></category>
		<category><![CDATA[php date]]></category>

		<guid isPermaLink="false">http://www.phpmonster.org/?p=31</guid>
		<description><![CDATA[Mi è capitato spesso di dover convertire formati di date diverse tra loro, sia per motivi di internazionalizzazione (parolona!!!), sia per motivi di controllo e/o comparazione. PHP mette già a disposizione diversi strumenti per poter convertire date tra loro, ma uno strumento unico non c&#8217;è, e quindi il povero programmatorino deve ricorrere a diverse linee [...]]]></description>
			<content:encoded><![CDATA[<p>Mi è capitato spesso di dover convertire formati di date diverse tra loro, sia per motivi di internazionalizzazione (parolona!!!), sia per motivi di controllo e/o comparazione.</p>
<p>PHP mette già a disposizione diversi strumenti per poter convertire date tra loro, ma uno strumento unico non c&#8217;è, e quindi il povero programmatorino deve ricorrere a diverse linee di codice o alla realizzazione di funzioni appropriate per poter portare le diverse date sullo stesso piano in termini di sintassi e valore.</p>
<p>Se per esempio volessi convertire una data in formato YYYY-MM-GG tipica di MySQL in formato italiano avrei 2 strade principali:</p>
<p>&nbsp;</p>
<pre>
$sql_date='2011-07-23';
list($year,$month,$day)=explode('-',$qsl_date);
echo "$day/$month/$year";
</pre>
<p>oppure</p>
<pre>
date('d/m/Y',strtotime($sql_date));
</pre>
<p>Qualcuno potrebbe obbiettare: &#8220;ma il secondo esempio non ti andava bene?&#8221;</p>
<p>Il secondo esempio va bene solo finché il formato data è un formato riconosciuto valido dal parser della funzione strtotime, con altri formati viceversa non è possibile, e bisogna fare delle &#8216;pre-conversioni&#8217; affinché si ottenga il risultato sperato.</p>
<p>Avvalendomi della sintassi usata in MySQL per la definizione dei modelli di date, ho quindi realizzato una piccola funzione capace di, dati 2 modelli e una variabile da verificare, convertire il formato data in maniera tale che la leggibilità del codice non venga penalizzata, e tutti i formati possano essere parsati e restituiti come ci si aspetta. No tutte le conversioni sono possibili però in quanto non si può passare per esempio alla funzione un modello che contempli solo il mese testuale e pretendere che venga restituito il timestamp.</p>
<p><strong>La Sintassi</strong></p>
<p>Innanzitutto facciamo riferimento a <a href="http://www.php.net/manual/en/function.date.php" target="_blank">quello che c&#8217;è scritto qui</a> in merito alle variabili utilizzate da PHP per riconoscere i componenti di una data, e che riporto per i più pigri&#8230;.</p>
<p>The format of the outputted date <a href="http://www.php.net/manual/en/language.types.string.php">string</a>. See the formatting options below. There are also several <a href="http://www.php.net/manual/en/class.datetime.php#datetime.constants.types">predefined date constants</a> that may be used instead, so for example <strong><tt>DATE_RSS</tt></strong> contains the format string <em>&#8216;D, d M Y H:i:s&#8217;</em>.</p>
<p>&nbsp;</p>
<table>
<caption><strong>The following characters are recognized in the <em><tt>format</tt></em> parameter string</strong></caption>
<thead valign="middle">
<tr valign="middle">
<th><em><tt>format</tt></em> character</th>
<th>Description</th>
<th>Example returned values</th>
</tr>
</thead>
<tbody valign="middle">
<tr valign="middle">
<td align="center"><em>Day</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>d</em></td>
<td align="left">Day of the month, 2 digits with leading zeros</td>
<td align="left"><em>01</em> to <em>31</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>D</em></td>
<td align="left">A textual representation of a day, three letters</td>
<td align="left"><em>Mon</em> through <em>Sun</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>j</em></td>
<td align="left">Day of the month without leading zeros</td>
<td align="left"><em>1</em> to <em>31</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>l</em> (lowercase &#8216;L&#8217;)</td>
<td align="left">A full textual representation of the day of the week</td>
<td align="left"><em>Sunday</em> through <em>Saturday</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>N</em></td>
<td align="left">ISO-8601 numeric representation of the day of the week (added in PHP 5.1.0)</td>
<td align="left"><em>1</em> (for Monday) through <em>7</em> (for Sunday)</td>
</tr>
<tr valign="middle">
<td align="left"><em>S</em></td>
<td align="left">English ordinal suffix for the day of the month, 2 characters</td>
<td align="left"><em>st</em>, <em>nd</em>, <em>rd</em> or <em>th</em>. Works well with <em>j</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>w</em></td>
<td align="left">Numeric representation of the day of the week</td>
<td align="left"><em>0</em> (for Sunday) through <em>6</em> (for Saturday)</td>
</tr>
<tr valign="middle">
<td align="left"><em>z</em></td>
<td align="left">The day of the year (starting from 0)</td>
<td align="left"><em>0</em> through <em>365</em></td>
</tr>
<tr valign="middle">
<td align="center"><em>Week</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>W</em></td>
<td align="left">ISO-8601 week number of year, weeks starting on Monday (added in PHP 4.1.0)</td>
<td align="left">Example: <em>42</em> (the 42nd week in the year)</td>
</tr>
<tr valign="middle">
<td align="center"><em>Month</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>F</em></td>
<td align="left">A full textual representation of a month, such as January or March</td>
<td align="left"><em>January</em> through <em>December</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>m</em></td>
<td align="left">Numeric representation of a month, with leading zeros</td>
<td align="left"><em>01</em> through <em>12</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>M</em></td>
<td align="left">A short textual representation of a month, three letters</td>
<td align="left"><em>Jan</em> through <em>Dec</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>n</em></td>
<td align="left">Numeric representation of a month, without leading zeros</td>
<td align="left"><em>1</em> through <em>12</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>t</em></td>
<td align="left">Number of days in the given month</td>
<td align="left"><em>28</em> through <em>31</em></td>
</tr>
<tr valign="middle">
<td align="center"><em>Year</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>L</em></td>
<td align="left">Whether it&#8217;s a leap year</td>
<td align="left"><em>1</em> if it is a leap year, <em>0</em> otherwise.</td>
</tr>
<tr valign="middle">
<td align="left"><em>o</em></td>
<td align="left">ISO-8601 year number. This has the same value as <em>Y</em>, except that if the ISO week number (<em>W</em>) belongs to the previous or next year, that year is used instead. (added in PHP 5.1.0)</td>
<td align="left">Examples: <em>1999</em> or <em>2003</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>Y</em></td>
<td align="left">A full numeric representation of a year, 4 digits</td>
<td align="left">Examples: <em>1999</em> or <em>2003</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>y</em></td>
<td align="left">A two digit representation of a year</td>
<td align="left">Examples: <em>99</em> or <em>03</em></td>
</tr>
<tr valign="middle">
<td align="center"><em>Time</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>a</em></td>
<td align="left">Lowercase Ante meridiem and Post meridiem</td>
<td align="left"><em>am</em> or <em>pm</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>A</em></td>
<td align="left">Uppercase Ante meridiem and Post meridiem</td>
<td align="left"><em>AM</em> or <em>PM</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>B</em></td>
<td align="left">Swatch Internet time</td>
<td align="left"><em>000</em> through <em>999</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>g</em></td>
<td align="left">12-hour format of an hour without leading zeros</td>
<td align="left"><em>1</em> through <em>12</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>G</em></td>
<td align="left">24-hour format of an hour without leading zeros</td>
<td align="left"><em>0</em> through <em>23</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>h</em></td>
<td align="left">12-hour format of an hour with leading zeros</td>
<td align="left"><em>01</em> through <em>12</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>H</em></td>
<td align="left">24-hour format of an hour with leading zeros</td>
<td align="left"><em>00</em> through <em>23</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>i</em></td>
<td align="left">Minutes with leading zeros</td>
<td align="left"><em>00</em> to <em>59</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>s</em></td>
<td align="left">Seconds, with leading zeros</td>
<td align="left"><em>00</em> through <em>59</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>u</em></td>
<td align="left">Microseconds (added in PHP 5.2.2)</td>
<td align="left">Example: <em>654321</em></td>
</tr>
<tr valign="middle">
<td align="center"><em>Timezone</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>e</em></td>
<td align="left">Timezone identifier (added in PHP 5.1.0)</td>
<td align="left">Examples: <em>UTC</em>, <em>GMT</em>, <em>Atlantic/Azores</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>I</em> (capital i)</td>
<td align="left">Whether or not the date is in daylight saving time</td>
<td align="left"><em>1</em> if Daylight Saving Time, <em>0</em> otherwise.</td>
</tr>
<tr valign="middle">
<td align="left"><em>O</em></td>
<td align="left">Difference to Greenwich time (GMT) in hours</td>
<td align="left">Example: <em>+0200</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>P</em></td>
<td align="left">Difference to Greenwich time (GMT) with colon between hours and minutes (added in PHP 5.1.3)</td>
<td align="left">Example: <em>+02:00</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>T</em></td>
<td align="left">Timezone abbreviation</td>
<td align="left">Examples: <em>EST</em>, <em>MDT</em> &#8230;</td>
</tr>
<tr valign="middle">
<td align="left"><em>Z</em></td>
<td align="left">Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive.</td>
<td align="left"><em>-43200</em> through <em>50400</em></td>
</tr>
<tr valign="middle">
<td align="center"><em>Full Date/Time</em></td>
<td align="left">&#8212;</td>
<td align="left">&#8212;</td>
</tr>
<tr valign="middle">
<td align="left"><em>c</em></td>
<td align="left">ISO 8601 date (added in PHP 5)</td>
<td align="left">2004-02-12T15:19:21+00:00</td>
</tr>
<tr valign="middle">
<td align="left"><em>r</em></td>
<td align="left"><a href="http://www.faqs.org/rfcs/rfc2822">» RFC 2822</a> formatted date</td>
<td align="left">Example: <em>Thu, 21 Dec 2000 16:01:07 +0200</em></td>
</tr>
<tr valign="middle">
<td align="left"><em>U</em></td>
<td align="left">Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)</td>
<td align="left">See also <a href="http://www.php.net/manual/en/function.time.php">time()</a></td>
</tr>
</tbody>
</table>
<p>A differenza della funzione nativa però noi anteporremo un simbolo % per indicare che quella è una variabile&#8230; quindi</p>
<p>d-m-Y</p>
<p>diventa</p>
<p>%d-%m-%Y</p>
<p>semplice no?</p>
<p>il risultato quindi vien da se&#8230; ovvero facendo uso della nostra funzione potremmo scrivere</p>
<pre>
//la data da convertire
$sql_date='2011-11-23';
//il formato della data da convertire
$format_in='$Y-%m-%d';
//il formato della data da restituire
$format_out='%d/%m/%Y';
</pre>
<p>&nbsp;</p>
<p><strong>La funzione</strong></p>
<p>Ecco quindi il codice della funzione con qualche commento&#8230;. spero sia di vostro gradimento!</p>
<pre>
function date_format_convert($from='',$to='',$date=''){
//preparo la data per trattarla
//all' interno di una regular expression
$from_reg =preg_quote($from);

//recupero i valori dal modello di input
//e creo un pattern con cui fare match sulla data
preg_match_all('/%[a-z]{1}/i',$from,$from_params);
if(empty($from_params)) $from_params[0]=array();
foreach($from_params[0] as $param){
$from_reg=str_replace($param,'(.+)',$from_reg);
}
$from_params=$from_params[0];

//chiudo il pattern con i delimitatori i e lo provo
$from_reg='#'.$from_reg.'#';
preg_match($from_reg,$date,$from_values);
array_shift($from_values);

//se non ci troviamo tra modello di input e data ritorna false
if(empty($from_values)) return false;

//se il modello è correttamente parsabile,
//possiamo provare a creare il timestamp relativo
//e convertire i valori non contemplati dal modello originale

//vale solo se trovati ALMENO anno, mese e giorno e opzionalmente
//anche ore, minuti e secondi
//questi sono anche i parametri che rappresentano la maggiorparte dei casi

//anno -- trovato se dichiarato con %Y
if(array_search('%Y',$from_params) !== false){$year_str=$from_values[array_search('%Y',$from_params)];}
//mese -- trovato se dichiarato %m oppure %n
if(array_search('%m',$from_params) !== false){$month_str=$from_values[array_search('%m',$from_params)];}
elseif(array_search('%n',$from_params) !== false){$month_str=str_pad($from_values[array_search('%n',$from_params)],2,0,STR_PAD_LEFT);}

//giorno -- trovato se dichiarato %d oppure %j
if(array_search('%d',$from_params) !== false){$day_str=$from_values[array_search('%d',$from_params)];}
elseif(array_search('%j',$from_params) !== false){$day_str=str_pad($from_values[array_search('%j',$from_params)],2,0,STR_PAD_LEFT);}

//ora -- trovato se dichiarato %H oppure %G
if(array_search('%H',$from_params) !== false){$hour_str=$from_values[array_search('%H',$from_params)];}
elseif(array_search('%G',$from_params) !== false){$hour_str=str_pad($from_values[array_search('%G',$from_params)],2,0,STR_PAD_LEFT);}

//minuti -- trovato se dichiarato %i
if(array_search('%i',$from_params) !== false){$mins_str=$from_values[array_search('%i',$from_params)];}

//secondi -- trovato se dichiarato %s
if(array_search('%s',$from_params) !== false){$secs_str=$from_values[array_search('%s',$from_params)];}

//compongo la data da parsare
$timestamp=false;
if(isset($year_str,$month_str,$day_str)){
if(isset($hour_str,$mins_str,$secs_str))
$timestamp=mktime($hour_str,$mins_str,$secs_str,$month_str,$day_str,$year_str);
else
$timestamp=mktime(0,0,0,$month_str,$day_str,$year_str);
}

//procedo alla conversione vera
//recupero i valori dal modello di output
preg_match_all('/%[a-z]{1}/i',$to,$to_params);
if(empty($to_params)) $to_params[0]=array();
foreach($to_params[0] as $tparam){
$key=array_search($tparam,$from_params);
if($key === false) $date_param = ($timestamp != false || $timestamp &gt; 0 )?date( str_replace('%','',$tparam) ,$timestamp ):'';
else $date_param=$from_values[$key];

$to=str_replace($tparam,$date_param,$to);
}

//ritorno la data rimpiazzata e ordinata!!
return $to;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmonster.org/blog/php/date-converter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

