[Risolto] [PHP] ora solare ora legale
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
[Risolto] [PHP] ora solare ora legale
Ho costruito un oggetto php "DateRange" che ha due attributi DateTime (inizio,fine).
Sto cercando di fare tutte le operazioni che si possono fare, del tipo:
Se un DateRange overlappa un altro DateRange, per quanto tempo. Quant'e' la durata di questo intervallo... etc etc.
Adesso sono bloccato a questa cosa:
Supponendo di avere un DateRange, che si trova sopra a cavallo del cambio d'ora. Come faccio a saperlo?
Inoltre, per fare questo genere di calcoli (Durata; overlapping; ...) , trasformo il tutto in timestamp, e' corretto o a causa di questi fenomeni (come ora solare o anno bisestile), rischio di incappare in qualche problema?
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Per fare dei calcoli corretti devi necessariamente passare dalla timezone, non tutti usano l'ora legale.
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Il mio DateRange mi dice quando due intervalli date si sovrappongono, per quanto tempo.
Lo scopo di questa classe era proprio astrarre una classe che fosse un intervallo di tempo. Non del genere attraversabile, ma proprio un periodo con un'inizio ed una fine e che si occupasse di operazioni di questo genere.
[EDIT]
DateRange e' composto da due DateTime che sono rispettivamente inizio e fine. Quindi passo comunque per la timezone. Quello che non riesco a trovare e come fare a capire se sono passato durante un cambio d'ora.
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Una Timezone (esempio Europa/Rome) e' legato a qualche altro fattore (tipo UTC - GMT - ?) ed in particolare quando viene spostata l'ora legale cambia il riferimento ? come posso catturare questa cosa?
Sostanzialmente quello che devo fare e' controllare se "Inizio" e "Fine" del mio intervallo hanno lo stesso (UTC/GMT/?), nel caso in cui cambi devo sottrarre la differenza fra i meridiani... Ma non so capire come prendere questo riferimento...
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Quali operazioni ti hanno costretto ad usare i timestamp invece dei Datetime?
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Attualmente il mio algoritmo se metto queste date di inizio fine:
Codice: Seleziona tutto
Inizio: 2015-03-29 01:00
Fine: 2015-03-29 03:00
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Codice: Seleziona tutto
<?php
$tz = new DatetimeZone('UTC');
$start = new Datetime('2015-03-29 01:00',$tz);
$end = new Datetime('2015-03-29 03:00',$tz);
$minutesInterval = new DateInterval('PT1M');
$period = new DatePeriod($start,$minutesInterval,$end);
var_dump( iterator_count($period) );
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
infatti in questo modo:
Codice: Seleziona tutto
<?php
$tz = new DatetimeZone('Europe/Rome');
$start = new Datetime('2015-03-29 01:00',$tz);
$end = new Datetime('2015-03-29 03:00',$tz);
$minutesInterval = new DateInterval('PT1M');
$period = new DatePeriod($start,$minutesInterval,$end);
var_dump( iterator_count($period) );
Codice: Seleziona tutto
int(60)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Se proprio vuoi darti allo spaghetti-code:
Codice: Seleziona tutto
<?php
$tz = new DatetimeZone('Europe/Rome');
$start = new Datetime('2015-03-29 01:00',$tz);
$end = new Datetime('2015-03-29 03:00',$tz);
$startTime = $start->getTimestamp();
$endTime = $end->getTimestamp();
$dstStart = date('I',$startTime);
$dstEnd = date('I',$endTime);
$minutes = ($endTime-$startTime)/60+($dstEnd-$dstStart)*60;
var_dump($minutes);Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Per intenderci:
Codice: Seleziona tutto
<?php
$tzRome = new DatetimeZone('Europe/Rome');
$start = new Datetime('2015-03-29 01:00',$tzRome);
$end = new Datetime('2015-03-29 03:00',$tzRome);
var_Dump( $start->format('Y-m-d h:i:s'), $end->format('Y-m-d h:i:s') );
$tzUTC = new DatetimeZone('UTC');
$start->setTimezone($tzUTC);
$end->setTimezone($tzUTC);
var_Dump( $start->format('Y-m-d h:i:s'), $end->format('Y-m-d h:i:s') );
Per intederci:
Codice: Seleziona tutto
<?php
$date1 = '2015-03-29 01:00';
$date2 = '2015-03-29 03:00';
// Timezone Europe/Rome
$tzRome = new DatetimeZone('Europe/Rome');
$start = new Datetime($date1,$tzRome);
$end = new Datetime($date2,$tzRome);
$int = new DateInterval('PT1M');
$period = new DatePeriod($start,$int,$end);
var_Dump( 'Timezone Europe/Rome', iterator_count($period) );
// Timezone UTC
$tzUTC = new DatetimeZone('UTC');
$start = new Datetime($date1,$tzUTC);
$end = new Datetime($date2,$tzUTC);
$int = new DateInterval('PT1M');
$period = new DatePeriod($start,$int,$end);
var_Dump( 'Timezone UTC', iterator_count($period) );
//Timezone UTC da format Europe/Rome
$tzUTC = new DatetimeZone('UTC');
$start = new Datetime( $start->format('Y-m-d h:i:s'), $tzUTC );
$end = new Datetime( $end->format('Y-m-d h:i:s'), $tzUTC );
$int = new DateInterval('PT1M');
$period = new DatePeriod($start,$int,$end);
var_Dump( 'Timezone UTC da format Europe/Rome', iterator_count($period) );
//Timezone Europe/Rome convertita in UTC
$start = new Datetime($date1,$tzRome);
$end = new Datetime($date2,$tzRome);
$start->setTimezone($tzUTC);
$end->setTimezone($tzUTC);
$int = new DateInterval('PT1M');
$period = new DatePeriod($start,$int,$end);
var_Dump( 'Timezone Europe/Rome convertita in UTC', iterator_count($period) );
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
(Il timezone utilizzato attualmente e' Europe/Rome:)
Codice: Seleziona tutto
$inizio_1 = new DateTime('2015-10-25 01:00');
$inizio_1 = $inizio_1->modify('+60 minutes'); //(02:00 before change)
$fine_1 = clone $inizio_1;
$fine_1->modify('+60 minutes'); //(02:00 after change)
$this->assertEquals(
'02:00',
$inizio_1->format('H:i')
);
$this->assertEquals(
'02:00',
$fine_1->format('H:i')
);
Codice: Seleziona tutto
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'02:00'
+'03:00'
partendo dal giorno 2015-10-25 alle ore 01:00
dopo 60 minuti dovrei trovarmi 2015-10-25 alle ore 02:00
dopo altri 60 minuti dovrei trovarmi 2015-10-25 alle ore 02:00
e' corretto?
Internamente DateTime non tiene conto di questa cosa?
[edit]
ah ovviamente l'errore e' su questa assert:
Codice: Seleziona tutto
$this->assertEquals(
'02:00',
$fine_1->format('H:i')
);
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Codice: Seleziona tutto
<?php
$tz = new Datetimezone('Europe/Rome');
$inizio_1 = new DateTime('2015-10-25 01:00',$tz);
$fine_1 = new DateTime('2015-10-25 04:00',$tz);
$int = new DateInterval('PT1M');
$per = new DatePeriod($inizio_1, $int, $fine_1);
var_dump(
$inizio_1->format('Y-m-d h:i:s'),
$fine_1->format('Y-m-d h:i:s'),
iterator_count($per) //180
);
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Codice: Seleziona tutto
$inizio = new DateTime('2015-10-25 01:00');
Codice: Seleziona tutto
'UTC +1'
oppure
'UTC +2'
[edit]
ho cambiato idea, utilizzo l'orologio UTC e per le date che devo sputare fuori faccio le trasformazioni su quella timezone.
Come posso segnalare questo problema a php?
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Non ho ben capito che intendi ma per vedere il fuso:SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4757019#p4757019][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:ripropongo la stessa domanda, data una data di una timezone: esempio
esiste un modo per sputare fuori da inizio una cosa tipoCodice: Seleziona tutto
$inizio = new DateTime('2015-10-25 01:00');non riesco a trovare un metodo che mi dia questo... sinceramente non ho idea di come costruirlo...Codice: Seleziona tutto
'UTC +1' oppure 'UTC +2'
Codice: Seleziona tutto
$tzId = $date->format('e');Codice: Seleziona tutto
$diff = $date->format('P');https://bugs.php.net/how-to-report.phpSuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4757019#p4757019][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: [edit]
ho cambiato idea, utilizzo l'orologio UTC e per le date che devo sputare fuori faccio le trasformazioni su quella timezone.
Come posso segnalare questo problema a php?
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
Se il discorso è concluso ricorda il [Risolto].
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
- SuperStep
- Entusiasta Emergente

- Messaggi: 2037
- Iscrizione: lunedì 19 dicembre 2011, 16:26
- Desktop: Unity
- Distribuzione: Ubuntu 16.04 LTS x86_64
- Sesso: Maschile
- Località: Somma Vesuviana (NA)
Re: [PHP] Sapere se un range di data infrange l'ora solare/l
che e' basato sullo stesso problema, mi sono limitato a votare che anche io sono affetto dallo stesso bug.
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti
