Newsgroup: it.comp.www.php
Titolo: PHP, date e ore

Eccomi a riproporre un vecchio post a cui non sono ancora riuscito a trovare 
una risposta.
Come fare a disabilitare in php l'uso, o diciamo meglio, la distinzione fra 
ora legale e ora solare.
In pratica vorrei rendere il php "stupido" e vorrei che non considerasse 
piu' i passaggi da ora solare a ora legale e viceversa.
Il problema che si presenta e' che mentre nel db le ore si susseguono di 15 
minuti in 15 minuti, a video mi ritrovo
27/03/05 01:45:00 00000 00000 00000 00000 00000 00000 00000
27/03/05 03:00:00 00000 00000 00000 00000 00000 00000 00000
lo script e'
$dataora = date("d/m/y H:i:s", $dataora_s);
$ROWS .= $dataora . ' ' . $dativari . "<br>";
Premetto che non posso stampare direttamente la data e l'ora proveniente dal 
db e nemmmeno effettuare la formattazione della data del db usando le 
funzioni standard sql.
Ho la dataora proveniente da un strotime e devo trasformarla in d/m/y H:i:s.
Consigli ? 

Totem wrote:

cosa c'e' in $datvari..
$ROWS .= "$dataora<br />";
-- 
www.iuz-lab.info

> $ROWS .= $dataora . ' ' . $dativari . "<br>";
preciso... dataora_s proviene da una elaborazione sul campo dataora 
(datetime) del db.
$rows e' un buffer che poi viene stampato alla fine (o salvato in un 
file)...
In pratica $rows contiene
....
27/03/05 01:45:00 00000 00000 00000 00000 00000 00000 00000
27/03/05 03:00:00 00000 00000 00000 00000 00000 00000 00000
....
al termine di tot cicli.
Io non vorrei il salto di un ora e un quarto anche perche' sballa tutte le 
misure.
L'output corretto dovrebbe essere
....
27/03/05 01:45:00 00000 00000 00000 00000 00000 00000 00000
27/03/05 02:00:00 00000 00000 00000 00000 00000 00000 00000
....
saluti 

 $ROWS .= "$dataora<br />";
statistiche... principalmente acquisizioni da parte di unita' elettroniche. 
Misure campionate ogni 15 minuti etc etc... 

 saluti
con che criterio vorresti che fosse colmata questa lacuna di statistiche?
se hai dati per 1:45 e 2:30
l'output dovra' essere..
1:45 dati
2:00 ????
2:15 ????
2:30 dati
oppure
1:45 dati
2:00 dati // con data e ora modificata dallo script
-- 
www.iuz-lab.info

Per essere precisi
<?php
$dataora_s = strtotime("03/27/05 01:45:00");
echo date("d/m/y H:i:s", $dataora_s) . '<br>';
$dataora_s = $dataora_s + 15*60;
echo date("d/m/y H:i:s", $dataora_s) . '<br>';
$dataora_s = $dataora_s + 15*60;
echo date("d/m/y H:i:s", $dataora_s) . '<br>';
?>
Come risolvo che l'output non e' quello da me previsto ?
27/03/05 01:45:00
27/03/05 03:00:00
27/03/05 03:15:00 

Totem wrote:

non credo ci sia un modo per evitare il calcolo dell'ora legale..
mi sarebbe venuta in mente un'idea ma non e' molto elegante, anzi..
-- 
www.iuz-lab.info

 mi sarebbe venuta in mente un'idea ma non e' molto elegante, anzi..
io mi stavo per riscrivere una classe che convertisse il time in 
millisecondi (quello proveniente da strtotime) in una data standard. Ma 
possibile che non ci sia un metodo migliore ? 

Totem wrote:

credo che il problema persisterebbe..
Data Ora - strtotime() nota i due valori identici..
03/26/05 22:00:00 +2 HOUR - 1111878000 
03/26/05 22:00:00 +3 HOUR - 1111881600 
03/26/05 22:00:00 +4 HOUR - 1111885200 *
03/26/05 22:00:00 +5 HOUR - 1111885200 *
03/26/05 22:00:00 +6 HOUR - 1111888800 
03/26/05 22:00:00 +7 HOUR - 1111892400 
se vuoi ti posto una funzione che dovrebbe evitare l'ora legale..
-- 
www.iuz-lab.info

 se vuoi ti posto una funzione che dovrebbe evitare l'ora legale..
prova, sono curioso. Il mio email e' quello che compare nel NG... 

 prova, sono curioso. Il mio email e' quello che compare nel NG... 
E perché in email? Il mondo è pieno di ficcanaso, categoria della quale
ovviamente non faccio parte ^__-
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

funzioni standard sql.
Se ho capito bene, tu hai $dataora_s che ti rappresenta il 27 marzo 2005
alle 01:00, e date() la stampa "01:00"; e poi, un'ora dopo hai un valore
3600 secondi superiore, ma date() lo stampa "03:00" perche' nel mezzo e'
scattata l'ora legale, e date() lo sa.
*SE* ho capito bene allora la soluzione e' farlo in due passaggi:
	date("d-m-Y", $data) . date(" H:i:s\n", $data%86400);
Script di prova:
<?
        $start = mktime(0, 0, 0, 3, 27, 2005);
        for ($i = 0; $i < 6; $i++)
        {
                $data = $start + 3600 * $i;
                print date("d-m-Y H:i:s - ", $data);
                print date("d-m-Y", $data) . date(" H:i:s\n",
$data%86400);
        }
?>
Output:
27-03-2005 00:00:00 - 27-03-2005 00:00:00
27-03-2005 01:00:00 - 27-03-2005 01:00:00
27-03-2005 03:00:00 - 27-03-2005 02:00:00 <----
27-03-2005 04:00:00 - 27-03-2005 03:00:00
27-03-2005 05:00:00 - 27-03-2005 04:00:00
27-03-2005 06:00:00 - 27-03-2005 05:00:00
Leonardo
-- 
Avere studiato senza mettere in pratica e' inutile;
mettere in pratica senza avere studiato e' pericoloso.
                                                - Conphpucio

 27-03-2005 06:00:00 - 27-03-2005 05:00:00
Bell'idea.
Peccato che non posso utilizzarla perche'...
27-03-2005 21:00:00 - 27-03-2005 20:00:00
27-03-2005 22:00:00 - 27-03-2005 21:00:00
27-03-2005 23:00:00 - 27-03-2005 22:00:00 <----
28-03-2005 00:00:00 - 28-03-2005 23:00:00 <----
28-03-2005 01:00:00 - 28-03-2005 00:00:00 <----
28-03-2005 02:00:00 - 28-03-2005 01:00:00
Passa di giorno prima del cambio ora :( :( :(
AIUTOOOOOOOOOOOOOOOO 

Totem wrote:

scusa ma adesso non ho tempo per fare di meglio..
questa sembra rispondere bene ma meglio se la controlli.. dopo magari la
riguardo un'po' anche io..
<?php
$data = "03/27/05 01:45:00";
$data   = strtotime($data);
$t_ora  = $data%86400;
$t_data = $data-$t_ora-3600;
while($i++ < 100){
  echo date("d-m-Y", $t_data + $t_ora) . ' ' . date("H:i:s", $t_ora) .
'<br />';
  $t_ora += 900;
}
?> 
-- 
www.iuz-lab.info

Leggevo online e forse si riesce a fare qualcosa modificando le impostazioni 
del server.
Dato che il server č di mia proprietą,sapete come modificare queste 
impostazioni ? E' una Fedora core 3
ciauz 

 ciauz
se ben ricordo le funzioni sulle date sono indipendenti dal sistema come
comportamento quindi non ti rimane che cercare qualche impostazione
relative a tali funzioni..
sarebbe la prima cosa che avevo fatto.. ma magari mi e' sfuggito qualcosa,
prova a cercare anche tu.. comunque ti ho postato un codice che dovrebbe
funzionare come vuoi..
-- 
www.iuz-lab.info

 riguardo un'po' anche io..
e' sempre come una coperta, tira da una parte o tira dall'altra la soluzione 
ha gli stessi pregi e difetti di quella postata da Leonardo.
Consideriamo che il mio scopo non e' stampare un elenco di date consecutive, 
o meglio, non solo questo. Puo' accadere di dover stampare dati di anche 
alcuni anni.
Ora come ora, gli script si bloccano sui cambi tra ora legale e ora solare 
(l'ora "torna indietro" e mi manda in loop tutti gli script senza contare 
che i dati stoccati non tengono conto di questi salti e quindi diventa anche 
difficile certificare i dati stampati).
Cambiando il GMT sapete se si riesce a ottenere qualcosa ? Il passaggio tra 
ora legale e solare avviene dappertutto ?
saluti 

Totem wrote:

finalmente..
variabile d'ambiente.. TZ=CET1
putenv("TZ=CET1");
oppure la setti direttamente visto che il server e' tuo..
-- 
www.iuz-lab.info

 putenv("TZ=CET1");
Ti prego, dimmi dove l'hai trovata !!!
I LOVE U

Passa di giorno prima del cambio ora :( :( :(
Be', certo. Altrimenti dovresti infilarci una riga di log come
riempitivo una volta l'anno, e mangiarne una tot mesi dopo.
Le due di notte del ventisette marzo NON ESISTONO, quindi come
fai a farle comparire? O sposti tutto avanti di una riga (come
ho fatto io), e ti sballa la mezzanotte perche' la sposti come
tutto il resto; oppure, AGGIUNGI una riga... inventandola come
piu' ti piace: magari raddoppi quella prima.
Soluzioni pulite, precise E corrette non ce ne sono.
Cioe' ce ne sono... spiega bene COSA vuoi fare, e vediamo COME
farlo. Questo, garantito, e' il sistema sbagliato :-)


Totem wrote:

alla ricerca disperata di una soluzione per il dst (daylight savings time)
ho trovato un testo che trattava problemi riguardanti la personalizzazione
degli orari, e nel mentre parlava anche del problema del dst o in italiano
ora legale e relative opzioni..
-- 
www.iuz-lab.info

riempitivo una volta l'anno, e mangiarne una tot mesi dopo.
Per la serie: come si puo' leggere qualcosa senza capirci un cazzo :-(((
E si' che avevi scritto in italiano.
 	print date("d-m-Y H:i:s - ", $data);
	print date("d-m-Y ", $data - 3600*date('I', $data)) .
        	date("H:i:s\n", $data%86400);
Questa l'ho verificata sia a marzo che a ottobre... vediamo se evito una
seconda figuruccia.


 ora legale e relative opzioni..
Dato che mi interessa molto l'argomeno non mi posteresti mica in pvt tale 
documento ?
Il mio email e' quello indicato.
saluti
Luca 

Totem wrote:

la risorsa esatta non la ricordo..
ma basta fare una ricerca con google con combinazioni di daylight time zone
TZ format e trovi sicuramente qualcosa..
qui c'e' una panoramica..
http://www.twinsun.com/tz/tz-link.htm
-- 
www.iuz-lab.info