<?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>gablog &#187; classi</title>
	<atom:link href="http://gabo.homelinux.com/tag/classi/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabo.homelinux.com</link>
	<description>Fino ad ora ho avuto un sito brutto. Ora ho un blog.</description>
	<lastBuildDate>Fri, 13 Nov 2009 14:29:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>GDate &#8211; Gestire le date in PHP</title>
		<link>http://gabo.homelinux.com/2009/03/gdate/</link>
		<comments>http://gabo.homelinux.com/2009/03/gdate/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 22:01:03 +0000</pubDate>
		<dc:creator>gabo</dc:creator>
				<category><![CDATA[programmazione]]></category>
		<category><![CDATA[classi]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gabo.homelinux.com/?p=270</guid>
		<description><![CDATA[GDate, la classe definitiva per la gestione delle date in PHP]]></description>
			<content:encoded><![CDATA[<p>La gestione delle date in PHP, come in ogni altro linguaggio, è una rogna senza fine. Ciascuno le rappresenta come gli pare, ad XML piacciono in un modo, MYSQL se ne inventa un'altro (cambiandolo, tra l'altro, da una versione all'altra), il servizio SOAP a cui mi devo collegare ha un'ulteriore modo di vederle e via discorrendo. Per non parlare dell'internazionalizzazione, gli americani usano aaaa-mm-dd, gli italiani dd-mm-aaaa e chi più ne ha più ne metta!</p>
<p>Ho scritto GDate (GaboDate), una classe PHP5 per la gestione delle date in italiano facilmente estendibile ad altre lingue. Il concetto è semplice: memorizzo la data in un oggetto, e poi la manipolo/rappresento nei vari modi e formati che mi è capitato di dover gestire.</p>
<p>Oltre a gestire date Mysql, XML, Unix Timestamp ed altri, fornisce utilità come settarsi all'<strong>ultimo giorno lavorativo</strong> del mese in corso, calcolare la<strong> distanza tra due date</strong>, settarsi a giorni particolari della settimana o del mese ed altre manipolazioni classiche realtive alle date.</p>
<p>Un esempio è forse la cosa più utile in questo caso. </p>

<pre class="brush: php;">
&lt;?php
require_once 'GDate.php';

$d = new GDate();
$d1 = new GDate();
$d1-&gt;setDateFromXmlDatetime('19810303T06:30:05');

echo &quot;\nNOW IS: \n&quot;;
echo &quot;\nLong date:\t\t&quot; . $d-&gt;getLong(true);
echo &quot;\nShort date:\t\t&quot; . $d-&gt;getShort();
echo &quot;\nMysql TimeStamp:\t&quot; . $d-&gt;getMysqlTimeStamp(true);
echo &quot;\nXML DateTime:\t\t&quot; . $d-&gt;getXmlDatetime(true);
echo &quot;\nUnix TimeStamp:\t\t&quot; . $d-&gt;getUnixTimeStamp(true);
echo &quot;\nIntegerdate:\t\t&quot; . $d-&gt;getIntegerDate(true);

echo &quot;\n&quot;;
echo &quot;\nCOMPARING DATE: \n&quot;;
echo &quot;\nLong date:\t\t&quot; . $d1-&gt;getLong(true);
echo &quot;\nShort date:\t\t&quot; . $d1-&gt;getShort();
echo &quot;\nMysql TimeStamp:\t&quot; . $d1-&gt;getMysqlTimeStamp(true);
echo &quot;\nXML DateTime:\t\t&quot; . $d1-&gt;getXmlDatetime(true);
echo &quot;\nUnix TimeStamp:\t\t&quot; . $d1-&gt;getUnixTimeStamp(true);
echo &quot;\nIntegerdate:\t\t&quot; . $d1-&gt;getIntegerDate(true);

/* DIFFERENZA DATE */
echo &quot;\n\n&quot;;
echo $d-&gt;getShort() .&quot; - &quot; .$d1-&gt;getShort();
echo &quot; =&gt; &quot; . $d1-&gt;compareDate($d);
echo &quot; giorni\n&quot;;

/* ULTIMO GIORNO LAVORATIVO */
echo &quot;\n&quot;;
$d-&gt;setLastWorkDayOfMonth();
echo &quot;L'ultimo giorno lavorativo di &quot; . $d-&gt;getMonthString() .
		&quot; &quot; . $d-&gt;getYear() . &quot; è &quot; . $d-&gt;getdayOfWeekString() .
		&quot; &quot; . $d-&gt;getDay() . &quot;\n&quot;;

$d1-&gt;setLastWorkDayOfMonth();
echo &quot;L'ultimo giorno lavorativo di &quot; . $d1-&gt;getMonthString() .
		&quot; &quot; . $d1-&gt;getYear() . &quot; è &quot; . $d1-&gt;getdayOfWeekString() .
		&quot; &quot; . $d1-&gt;getDay() . &quot;\n&quot;;

$d1-&gt;setDateFromShort('2/2/1992');
$d1-&gt;setLastWorkDayOfMonth();
echo &quot;L'ultimo giorno lavorativo di &quot; . $d1-&gt;getMonthString() .
		&quot; &quot; . $d1-&gt;getYear() . &quot; è &quot; . $d1-&gt;getdayOfWeekString() .
		&quot; &quot; . $d1-&gt;getDay() . &quot;\n&quot;;

/* CHECK LAST WORKING DAY */
echo &quot;\n&quot;;
$d = new GDate();
$d1 = new GDate();

$d1-&gt;setLastWorkDayOfMonth();

$d-&gt;setStartDay();
$d1-&gt;setStartDay();

echo &quot;Oggi:\t\t\t&quot; . $d-&gt;getLong(true);
echo &quot;\n&quot;;
echo &quot;Ultimo lavorativo:\t&quot; . $d1-&gt;getLong(true);
echo &quot;\n&quot;;

/* COMPARE DATE */
if ($d == $d1)
	echo &quot;Oggi è l'ultimo giorno lavorativo del mese\n&quot;;
else
	echo &quot;Oggi NON è l'ultimo giorno lavorativo del mese\n&quot;;

?&gt;
</pre>

<p>Lanciando il file di esempio scaricabile insieme alla classe, si ottiene il seguente output:</p>

<pre>g4b0@slack:~/sys/working/gdate$ php testGDate.php

NOW IS:

Long date:              23/03/2009-20:30:05
Short date:             23/3/2009
Mysql TimeStamp:        2009-03-23 20:30:05
XML DateTime:           20090323T20:30:05
Unix TimeStamp:         1237836605
Integerdate:            20090323

COMPARING DATE:

Long date:              03/03/1981-06:30:05
Short date:             3/3/1981
Mysql TimeStamp:        1981-03-03 06:30:05
XML DateTime:           19810303T06:30:05
Unix TimeStamp:         352445405
Integerdate:            19810303

23/3/2009 - 3/3/1981 => 10247 giorni

L'ultimo giorno lavorativo di Marzo 2009 è Martedì 31
L'ultimo giorno lavorativo di Marzo 1981 è Martedì 31
L'ultimo giorno lavorativo di Febbraio 1992 è Venerdì 28

Oggi:                   24/03/2009-00:00:00
Ultimo lavorativo:      31/03/2009-00:00:00
</pre>

<p>Io la trovo molto comoda, e la uso in svariati progetti. Dopo averci preso un po' la mano semplifica parecchio la vita, e velocizza lo sviluppo software. Ci sarebbero da aggiungere funzionalità varie, come la gestione dei centesimi di secondo, dei millesimi e dei microsecondi. Si potrebbero aggiungere lingue varie. Si potrebbero aggiungere nuove funzionalità.</p>
<p>Scarica <a title="GDate" href="/download/GDate.tar.bz2">GDate</a>.</p>
<p>Questo software è rilasciato sotto licenza GPL, reperibile presso <a title="GPL" href="http://www.gnu.org/copyleft/gpl.html">http://www.gnu.org/copyleft/gpl.html</a></p>]]></content:encoded>
			<wfw:commentRss>http://gabo.homelinux.com/2009/03/gdate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
