Newsgroup: it.comp.www.php
Titolo: PostgreSQL, PHP e orari

Dobrebbe essere semplice:
Vorrei memorizzare nel DB un campo  ora_inizio e un campo ora_fine e poi
vorrei ottenere la durata.
inizio [TIME]
fine   [TIME]
SELECT fine-inizio AS durata from prova;
ERROR:  No such function 'time_timespan' with the specified attributes
Allora  ho provato  ad aggirare  il  problema dal  lato PHP,  ma mi  sto
incasinando: qual e` la direzione giusta?
grazie :)
-- 
GHERdO, happy linux user.
"Non e' vero che linux non sia user-friendly:
       ...e' solo molto selettivo su chi siano i suoi amici. ;)

 incasinando: qual e` la direzione giusta?
Io imposterei sia il campo inizio che il campo fine come timestamp, cosě
da ottenere con inizio-fine il numero di secondi passati dall'inizio alla
fine (de che??!!): e quella č la durata! Non so se sia fattibile
direttamente come query su Postgres (ma penso proprio di si!), mal che
vada farlo in PHP č un attimo!
Ciao
--ev 

 vada farlo in PHP č un attimo!
ok, timestamp impostati:
inizio                |fine                  
----------------------+----------------------
2001-08-18 09:10:00+02|2001-08-18 10:00:00+02
poi via php:
 $inizio = pg_Result($result, $i, "inizio");
 $inizio = strtotime($inizio);
 $inizio = gmdate("H:i", $inizio);
 Ma ottengo: 09:08 invece che 09:10.
Ancora se faccio  select fine-inizio as durata ottengo "@  50 mins", che
non saprei  come convertire nel  formato "H:i"...  con il metodo  di cui
sopra ottengo sempre lo stesso valore "00:59".
Dov'e` che mi perdo? Perche` quei DUE minuti di scarto? 8-?
Non so se puo` servire, ma i  timestamp che scrivo nel db li ottengo con
 $inizio = mktime ($inizioh, $iniziom, 0, $mm, $gg, $aaaa);
Cos'e` quel +02 in fondo al timestamp? 
tnx =:)


 2001-08-18 09:10:00+02|2001-08-18 10:00:00+02
Abbiamo due visioni differenti su cosa sia una timestamp! :-)
Io chiamo timestamp una sequenza numerica che esprime i secondi passati
dal 1/1/1970: ad esempio, adesso č
998152555
Forse stiamo parlando della stessa cosa, ma espressa in maniera
differente!!
Comunque: una volta che hai quel dato (uno per l'inizio ed uno per la
fine) fai una semplice sottrazione e vedi la durata in secondi: poi ti
formatti i secondi come vuoi (puoi lasciare il tutto in secondi, anche
se vedere 346 non č tanto comodo come 5:46!) a seconda di quello che ti
serve fare.
Lo devo avere fatto (solo in PHP [o era Perl??], senza DB) da qualche
parte, se vuoi posso vedere se lo trovo!
Ciao
--ev

 serve fare.
Si`, ora  calcolo la sottrazione  dei due timestamp via  PHP. Preferirei
farla calcolare  a PostgreSQL in formato  "hh:mm:ss" invece che in  "@ 4
hours  5  minutes  5  seconds",  ma ancora  non  ho  capito  come...  ci
studiero`.
Credo poi che  i due minuti di  scarto, siano da imputare a  quel +02 in
fondo al  timestamp: anche qui  non so come  operare, ma di  sicuro devo
intervenire sul db.
Grazie :)


ERROR:  No such function 'time_timespan' with the specified attributes
direct=> SELECT version();
                           version
-------------------------------------------------------------
 PostgreSQL 7.1 on i686-pc-linux-gnu, compiled by GCC 2.95.2
(1 row)
direct=> CREATE TABLE test ( inizio time, fine time );
CREATE
direct=> INSERT INTO test VALUES (now(), now());
INSERT 9235929 1
direct=> SELECT fine-inizio AS durata from test;
  durata
----------
 00:00:00
(1 row)
direct=> \d test
        Table "test"
 Attribute | Type | Modifier
-----------+------+----------
 inizio    | time |
 fine      | time |
Leonardo perplesso
-- 
Nior thainig ar major i dtus an lae chugainn,
is ni rabhamar fein ann i gcoir na gceart
ach mar sheolfai aoireacht bo gan aoire,
ar thaobh na greine de Sliabh na mBan.

 (1 row)
Mi sa che il problema sta nella mia versione 6.5.3 di potato.


  PostgreSQL 7.1 on i686-pc-linux-gnu, compiled by GCC 2.95.2
Abbandonata l'idea del TIME, ho usato il TIMESTAMP.
Tutto bene, ma sto impazzendo lo stesso.
Uso *mktime* per scrivere il timestamp nel db: "2001-08-20 08:00:00+02".
Dopo  lo  leggo, lo  passo  a  strtotime e  lo  formatto  con $inizio  =
gmdate("H:i", $inizio) ottenendo 07:58 invece che 08:00.
E' evidente che c'e` una incomprensione a livello di timezone fra me, il
db e il php :)
Ho provato anche con export PGTZ='CEST', ma non ne esco fuori.
idee?
	tnx =)


Ho provato anche con export PGTZ='CEST', ma non ne esco fuori.
Casomai, 
	SQLExec($conn, "SET TIMEZONE='CEST';");
Per la cronaca, ma per PostgreSQL 7.1.x, dopo essermi fatto esplodere le
balle per troppo tempo con problemi di date e simili, mi sono scritto la
funzione gmdate() per PostgreSQL :-)
direct=> select dateformat('\S\O\N\O \L\E H:i:s \D\E\L d-m-Y',
date_part('epoch'
,now()));
           dateformat
---------------------------------
 SONO LE 19:51:52 DEL 20-08-2001
(1 row)
Leonardo


 	SQLExec($conn, "SET TIMEZONE='CEST';");
Leonardo sei sempre un drago!! Con pg_exec ho risolto :)
Ma non  c'e` un  modo per  ficcare la  giusta time  zone nella  zucca di
postgres?  Almeno  non  devo  trascinarmi questa  pg_exec  per  svariate
pagine.
Grazie ancora e W Firenze. =)


pagine.
Dipende purtroppo da come e' installato PostgreSQL. Sulla SuSE basta che
TZ, non PGTZ, sia quella giusta, e PostgreSQL la recepisce all'avvio.
