Il linguaggio JavaScript
 

parametri di funzione

debharlock@gmail.com 30 Ott 2014 22:24
Salve, premesso che non ne capisco di javascript, avrei bisogno di modificare
questo pezzo di codice in modo che 'now' venga valorizzato con il tempo attuale.

Mi date una mano? :-D i tratta di un ******* jquery per un countdown

<script type="text/javascript">
$('.countdown').final_countdown({
'start': 1362139200,
'end': 1414799999,
'now': 1387461319
});
</script>


Non c'entra niente con la domanda iniziale ma ho una curiosità... è meglio
lasciare fare al browser la valorizzazione delle variabili oppure sarebbe meglio
farle lato server?


Grazie
debharlock
Catarsi 1 Nov 2014 02:36
<debharlock@gmail.com> wrote:

> Salve, premesso che non ne capisco di javascript, avrei bisogno di
> modificare questo pezzo di codice in modo che 'now' venga valorizzato con
> il tempo attuale.

Per i browser che lo supportano:

'now': event.timeStamp

http://www.w3schools.com/jsref/event_timestamp.asp

> Non c'entra niente con la domanda iniziale ma ho una curiosità... è meglio
> lasciare fare al browser la valorizzazione delle variabili oppure sarebbe
> meglio farle lato server?

Paisà, nun aggie capìte.

--------------------

Ehi, salve a tutti! ^__-

--
mailto: y = i
------------------------------------------------------
http://www.catarsi.it
Vivo nel terrore di non essere frainteso (Oscar Wilde)
ZER0 1 Nov 2014 02:38
On 30/10/14 22:24 , debharlock@gmail.com wrote:
> Salve, premesso che non ne capisco di javascript, avrei bisogno di modificare
questo pezzo di codice in modo che 'now' venga valorizzato con il tempo attuale.
>
> Mi date una mano? :-D i tratta di un ******* jquery per un countdown
>
> <script type="text/javascript">
> $('.countdown').final_countdown({
> 'start': 1362139200,
> 'end': 1414799999,
> 'now': 1387461319

Pro*****ilmente vuoi fare una cosa tipo:

'now': Date.now()

O, per andare sul sicuro (visto che non è supportato da versioni di
browser poco recenti, come IE<9):

'now': new Date().getTime()

> });
> </script>
>
>
> Non c'entra niente con la domanda iniziale ma ho una curiosità... è meglio
lasciare fare al browser la valorizzazione delle variabili oppure sarebbe meglio
farle lato server?

Ottieni due effetti diversi, quindi dipende da quel che vuoi ottenere:
farla lato client, vuol dire che ti prende il tempo del client; quindi
avrai un valore diverso a Roma o San Francisco, per intenderci, per via
della time zone, dipende il client da dove si connette. Se invece la fai
lato server, prenderai il tempo del server, a prescindere da dove si
connette il client. C'è inoltre da considerare i tempi di attesa:
facendolo fare al client, il il tempo verrà preso nel momento esatto in
cui la pagina sarà disponibile al client; mentre facendolo fare al
server, il tempo verrà preso prima che la pagina venga ricevuta dal
client, e in caso di connessioni lente o pagine pesanti, potrebbe essere
un valore significativo.
C'è anche un discorso di "sicurezza", sebbene non credo sia questo il
caso: se vuoi ad esempio fare un quiz a tempo, e dare un punteggio in
base a quanto ci mette l'utente fornire la risposta, è bene se il tempo
lo prendi sul server, giacché il dato che il client ti invia potrebbe
essere facilmente manomesso.

Come vedi, dipende da caso a caso.
debharlock@gmail.com 2 Nov 2014 01:51
On Saturday, November 1, 2014 2:38:37 AM UTC+1, ZER0 wrote:
> On 30/10/14 22:24 , debharlock@gmail.com wrote:
>> Salve, premesso che non ne capisco di javascript, avrei bisogno di
>>modificare questo pezzo di codice in modo che 'now' venga valorizzato
>>con il tempo attuale.
>>
>> Mi date una mano? :-D i tratta di un ******* jquery per un countdown

cut

>
> Pro*****ilmente vuoi fare una cosa tipo:
> 'now': Date.now()

Grazie... sono riuscito ad arrivarci dopo un giorno di prove

> O, per andare sul sicuro (visto che non è supportato da versioni di
> browser poco recenti, come IE<9):
>
> 'now': new Date().getTime()

Ecco. questo non lo sapevo e provvedo a correggerlo.

>> Non c'entra niente con la domanda iniziale ma ho una curiosità... è meglio
lasciare fare al browser la valorizzazione delle variabili oppure sarebbe meglio
farle lato server?
>
> Ottieni due effetti diversi, quindi dipende da quel che vuoi ottenere:
> farla lato client, vuol dire che ti prende il tempo del client; quindi
> avrai un valore diverso a Roma o San Francisco, per intenderci, per via
> della time zone, dipende il client da dove si connette.

Ecco... il problema sono le timezone. Visto che la data di partenza per il
countdown è fissa nel codice è possibile capire in quale fuso orario si trova
il client? Ci sarebbe anche il problema di ora legale\ora solare.

Ad esempio Natale inizia alle 00:00 del 25 dicembre in tutto il mondo. Qualsiasi
sia il fuso orario del client Natale inizierà sempre alle 00:00.
Diverso è il discorso per un evento che accadrà in una determinata parte del
mondo, ad esempio adesso sono le 2:00 e il mio aereo arriva a Milano alle 3:00,
per me mancano 60 minuti ma anche per chi sta a Londra mancano 60 minuti anche
se è l'1:00.

Riesco a risolvere la client?



> Se invece la fai lato server, prenderai il tempo del server,
> a prescindere da dove si connette il client.

cut

Rinuncio a farlo lato client. Si tratta di un paio di pagine HTML e, al momento,
mi bastano gli esercizi in JS ;)


Grazie
debharlock
ZER0 2 Nov 2014 10:03
On 02/11/14 01:51 , debharlock@gmail.com wrote:

[timestamp dal client o dal server]
>> Ottieni due effetti diversi, quindi dipende da quel che vuoi ottenere:
>> farla lato client, vuol dire che ti prende il tempo del client; quindi
>> avrai un valore diverso a Roma o San Francisco, per intenderci, per via
>> della time zone, dipende il client da dove si connette.
>
> Ecco... il problema sono le timezone.

Se il problema sono le timezone, è piú facilmente risolvibile se lo
lasci fare al client. Altrimenti, lato server, dovresti capire dove si
trova il client in base all'IP della richiesta che ti arriva.
Ovviamente, questo è abbastanza empirico come metodo – esattamente come
il cercare di capire la ******* del client in base all'IP – e può fallire
per diverse ragioni.

Se prendi usi la data del client, sai che stai usando quella che
l'utente ha impostato sul suo computer.

> Visto che la data di partenza per il countdown è fissa nel codice è
possibile capire in quale fuso orario si trova il client?

Sí, ma non ne hai bisogno. Intendo dire, se esegui il suddetto codice:

var today = new Date();
var xmas = new Date(today.getFullYear(), 11, 25);

Ottieni un oggetto `Date` con la data della mezzanotte di Natale, in
base alla timezone del client.

> Ci sarebbe anche il problema di ora legale\ora solare.

Sempre risolta dal client.

> Ad esempio Natale inizia alle 00:00 del 25 dicembre in tutto il mondo.
Qualsiasi sia il fuso orario del client Natale inizierà sempre alle 00:00.

Sí, però se tu prendi la data dal server, sarà la data con il fuso
orario del server. Se tu oggi dici al server "dammi la data della
mezzanotte di Natale" lui te la res*****uirà con +1 se il server si trova
a Milano, e -8 se il tuo server è fisicamente a San Francisco. Premesso,
ovviamente, che l'ora del server sia correttamente impostata.

Mentre invece se chiedi la mezzanotte di Natale al client, la chiedi in
base alla sua timezone, quindi, come dici te, "Natale inizierà sempre
alle 00:00", perché avendo la timezone uguale, è irrilevante.

> Riesco a risolvere la client?

La risolvi piú facilmente col client che col server, sí.

> Grazie
> debharlock

Prego
Alessandro Pellizzari 2 Nov 2014 12:37
Il Sat, 01 Nov 2014 17:51:47 -0700, debharlock ha scritto:

> Ad esempio Natale inizia alle 00:00 del 25 dicembre in tutto il mondo.
> Qualsiasi sia il fuso orario del client Natale inizierà sempre alle
> 00:00.
> Diverso è il discorso per un evento che accadrà in una determinata parte
> del mondo, ad esempio adesso sono le 2:00 e il mio aereo arriva a Milano
> alle 3:00, per me mancano 60 minuti ma anche per chi sta a Londra
> mancano 60 minuti anche se è l'1:00.

La gestione delle timezone è il motivo per cui il preferirei avere
qualcosa tipo lo Swatch Time. :P

Comunque, dipende da caso a caso. Per fare le cose fatte bene ti conviene
salvare sul server sempre le date in GMT/UTC, senza fusi orari e senza
DST. Da lì poi è facile convertirle.
Se hai Linux e PHP sul server, per esempio, ti basta usare gmdate('Y-m-d
H:i:s') per avere la data corrente in UTC.

Per il Natale, come dice ZER0, puoi prenderla dal client o, se il server
sa la timezone dell'utente (per esempio perché è loggato e l'ha impostata,
o perché l'ha presa da Javascript via AJAX), anche calcolarla lì.

Per informazioni tipo gli ******* puoi trasmettere sempre i dati in
UTC e convertirli lato client, con new Date().getTimezoneOffset(), (o
comunque al momento della visualizzazione) nella timezone locale.

Naturalmente questo significa che ad ogni input dell'utente devi
convertire la data che ti mette lui in UTC prima di salvarla sul server,
e questo può essere complicato. Per esempio se il 15 settembre stai
salvando un appuntamento per il 15 dicembre, il client ti dirà che c'è
l'ora legale, ma tu lo devi salvare con l'ora solare.

Per PHP c'è un intero manuale che spiega solo come gestire date e ore con
timezone e DST:

http://www.phparch.com/books/phparchitects-guide-to-date-and-time-
programming/


Bye.
debharlock@gmail.com 2 Nov 2014 14:37
On Sunday, November 2, 2014 10:03:38 AM UTC+1, ZER0 wrote:
> On 02/11/14 01:51 , debharlock@gmail.com wrote:
>
> [timestamp dal client o dal server]
>>> Ottieni due effetti diversi, quindi dipende da quel che vuoi ottenere:
>>> farla lato client, vuol dire che ti prende il tempo del client; quindi
>>> avrai un valore diverso a Roma o San Francisco, per intenderci, per via
>>> della time zone, dipende il client da dove si connette.
>>
>> Ecco... il problema sono le timezone.
>

mega cut

> Mentre invece se chiedi la mezzanotte di Natale al client, la chiedi in
> base alla sua timezone, quindi, come dici te, "Natale inizierà sempre
> alle 00:00", perché avendo la timezone uguale, è irrilevante.
>

Il problema non è Natale.... quello sarà sempre alla stessa ora per tutti
indipendentemente dal fuso orario.

Provo a spiegarmi meglio...

- Il volo AZ1234 parte da Milano alle 23:00
- Io mi collego alle 13:00 dall'Italia e avrò (23:00 - 13:00) un 10 ore
- Nello stesso momento tu ti colleghi da Londra. Per te saranno le 12:00 quindi
avrai (12:00 -23:00) 11 ore; questo è sbagliato in quanto anche per te mancano
10 ore

Come dice Pellizzari sotto dovrei salvare l'orario del volo in UTC (22:00UTC) a
quel punto

- per me sarebbe 22:00 - 13:00 +1:00 (10H)
- per te sarebbe 22:00 - 12:00 +0:00 (10H)


Dovrei farlo con JS buona fortuna

Grazie
debharlock
debharlock@gmail.com 2 Nov 2014 14:41
On Sunday, November 2, 2014 12:37:09 PM UTC+1, Alessandro Pellizzari wrote:
> Il Sat, 01 Nov 2014 17:51:47 -0700, debharlock ha scritto:
>
>> Ad esempio Natale inizia alle 00:00 del 25 dicembre in tutto il mondo.
>> Qualsiasi sia il fuso orario del client Natale inizierà sempre alle
>> 00:00.
>> Diverso è il discorso per un evento che accadrà in una determinata parte
>> del mondo, ad esempio adesso sono le 2:00 e il mio aereo arriva a Milano
>> alle 3:00, per me mancano 60 minuti ma anche per chi sta a Londra
>> mancano 60 minuti anche se è l'1:00.
>
> La gestione delle timezone è il motivo per cui il preferirei avere
> qualcosa tipo lo Swatch Time. :P
>

cosa è?


> Per il Natale, come dice ZER0, puoi prenderla dal client o, se il server
> sa la timezone dell'utente (per esempio perché è loggato e l'ha impostata,
> o perché l'ha presa da Javascript via AJAX), anche calcolarla lì.

Per Natale non c'è il problema, od*****, il problema esiste se io, in Italia,
voglio avere un allarme per fare gli auguri ad un londinese, visto ceh per lui
arriva prima.

> Per informazioni tipo gli ******* puoi trasmettere sempre i dati in
> UTC e convertirli lato client, con new Date().getTimezoneOffset(), (o
> comunque al momento della visualizzazione) nella timezone locale.
>
cut

> Per PHP c'è un intero manuale che spiega solo come gestire date e ore con
> timezone e DST:
>
> http://www.phparch.com/books/phparchitects-guide-to-date-and-time-
> programming/
>

devo cercarmi qualcosa di simile per JS


Grazie
debharlock
Alessandro Pellizzari 2 Nov 2014 14:53
Il Sun, 02 Nov 2014 05:41:29 -0800, debharlock ha scritto:

> On Sunday, November 2, 2014 12:37:09 PM UTC+1, Alessandro Pellizzari
> wrote:

>> La gestione delle timezone è il motivo per cui il preferirei avere
>> qualcosa tipo lo Swatch Time. :P

> cosa è?

http://www.swatch.com/zz_en/internettime/

In pratica un giorno è 1000 beats, e in un certo momento tutto il mondo è
allo stesso beat. Quindi le 327 a Roma sono le 327 a Londra, New York e *******
Da una parte sarà notte, da un'altra giorno e da un'altra sera.

Oltre a togliere la rogna di calcolare in sessantesimi e in 24esimi,
toglie anche la rogna delle timezone e del DST.

> Per Natale non c'è il problema, od*****, il problema esiste se io, in
> Italia, voglio avere un allarme per fare gli auguri ad un londinese,
> visto ceh per lui arriva prima.

Quindi diventa un appuntamento e non un evento, e lo gestisci come
appuntamento. :)

>> Per PHP c'è un intero manuale che spiega solo come gestire date e ore
>> con timezone e DST:

> devo cercarmi qualcosa di simile per JS

La teoria dietro è la stessa, e troverai centinaia di blog che parlano di
come risolvere il problema in tutti i linguaggi del mondo.

O meglio, come cercare di minimizzarlo, visto che nemmeno Google Calendar
lo gestisce in manera decente... :)

Bye.
ZER0 2 Nov 2014 15:28
On 02/11/14 14:37 , debharlock@gmail.com wrote:

>> [timestamp dal client o dal server]
>>>> Ottieni due effetti diversi, quindi dipende da quel che vuoi ottenere:
>>>> farla lato client, vuol dire che ti prende il tempo del client; quindi
>>>> avrai un valore diverso a Roma o San Francisco, per intenderci, per via
>>>> della time zone, dipende il client da dove si connette.
>>>
>>> Ecco... il problema sono le timezone.
>>
>
> mega cut
>
>> Mentre invece se chiedi la mezzanotte di Natale al client, la chiedi in
>> base alla sua timezone, quindi, come dici te, "Natale inizierà sempre
>> alle 00:00", perché avendo la timezone uguale, è irrilevante.

> Il problema non è Natale.... quello sarà sempre alla stessa ora per tutti
indipendentemente dal fuso orario.

No, questo ti sto dicendo. Il Natale a Roma non capita mica nello stesso
momento del Natale a San Francisco, no? La data è la stessa, ma non è lo
stesso momento. E non lo è per colpa del fuso orario. Se tu quindi fai
una pagina, che a mezzanotte del 25 Dicembre ti dice "Buon Natale!", se
prendi la data dal *server* invece che dal client, gli utenti che
visiteranno quella pagina da un fuso orario diverso da quello del server
riceveranno il "Buon Natale" all'orario sbagliato.

Per intenderci: se tu volessi fare un countdown per Natale, il fuso
orario è *essenziale* (vedasi cose come:
http://www.whereareyouchristmas.com/).

> Provo a spiegarmi meglio...
>
> - Il volo AZ1234 parte da Milano alle 23:00
> - Io mi collego alle 13:00 dall'Italia e avrò (23:00 - 13:00) un 10 ore
> - Nello stesso momento tu ti colleghi da Londra. Per te saranno le 12:00
quindi avrai (12:00 -23:00) 11 ore; questo è sbagliato in quanto anche per te
mancano 10 ore

È un esempio fallace. Di certo non modifichi l'orario di partenza, visto
che parte da Milano e tu devi verificare quell'orario con quella
timezone. Se tu volessi dire quante ore mancano alla partenza, puoi
semplicemente calcolare la differenza usando il fuso orario del luogo di
partenza, e questo puoi farlo dal server, non hai neanche bisogno di
sapere la timezone del client.

> Dovrei farlo con JS buona fortuna

Se vuoi accedere alla data del client, devi usare JS per forza. Puoi
inviare tale data al server, eventualmente, ma senza JS non puoi fare
niente in tal senso.
Domenico Pasella 2 Nov 2014 15:59
On Sunday, November 2, 2014 3:28:48 PM UTC+1, ZER0 wrote:
> On 02/11/14 14:37 , debharlock@gmail.com wrote:
>
>>> Mentre invece se chiedi la mezzanotte di Natale al client, la chiedi in
>>> base alla sua timezone, quindi, come dici te, "Natale inizierà sempre
>>> alle 00:00", perché avendo la timezone uguale, è irrilevante.
>
>> Il problema non è Natale.... quello sarà sempre alla stessa ora per tutti
indipendentemente dal fuso orario.
>
> No, questo ti sto dicendo. Il Natale a Roma non capita mica nello stesso
> momento del Natale a San Francisco, no? La data è la stessa, ma non è lo

cut
Hai ragione. Letto male io, pensavo ti riferissi al client e non al server. se
facciamo fare al client non dipendiamo dal fuso orario.

>
>> Provo a spiegarmi meglio...
>>
>> - Il volo AZ1234 parte da Milano alle 23:00
>> - Io mi collego alle 13:00 dall'Italia e avrò (23:00 - 13:00) un 10 ore
>> - Nello stesso momento tu ti colleghi da Londra. Per te saranno le 12:00
quindi avrai (12:00 -23:00) 11 ore; questo è sbagliato in quanto anche per te
mancano 10 ore
>
> È un esempio fallace. Di certo non modifichi l'orario di partenza, visto
> che parte da Milano e tu devi verificare quell'orario con quella
> timezone. Se tu volessi dire quante ore mancano alla partenza, puoi
> semplicemente calcolare la differenza usando il fuso orario del luogo di
> partenza, e questo puoi farlo dal server, non hai neanche bisogno di
> sapere la timezone del client.
>

Qua non ho capito invece


grazie
debharkock
debharlock@gmail.com 2 Nov 2014 16:02
On Sunday, November 2, 2014 3:28:48 PM UTC+1, ZER0 wrote:
> On 02/11/14 14:37 , debharlock@gmail.com wrote:
>
>>> Mentre invece se chiedi la mezzanotte di Natale al client, la chiedi in
>>> base alla sua timezone, quindi, come dici te, "Natale inizierà sempre
>>> alle 00:00", perché avendo la timezone uguale, è irrilevante.
>
>> Il problema non è Natale.... quello sarà sempre alla stessa ora per
>> tutti indipendentemente dal fuso orario.
>
> No, questo ti sto dicendo. Il Natale a Roma non capita mica nello stesso
> momento del Natale a San Francisco, no? La data è la stessa, ma non è lo

cut
Hai ragione. Letto male io, pensavo ti riferissi al client e non al server. se
facciamo fare al client non dipendiamo dal fuso orario.

>
>> Provo a spiegarmi meglio...
>>
>> - Il volo AZ1234 parte da Milano alle 23:00
>> - Io mi collego alle 13:00 dall'Italia e avrò (23:00 - 13:00) un 10 ore
>> - Nello stesso momento tu ti colleghi da Londra. Per te saranno le
>> 12:00 quindi avrai (12:00 -23:00) 11 ore; questo è sbagliato in quanto
>> anche per te mancano 10 ore
>
> È un esempio fallace. Di certo non modifichi l'orario di partenza, visto
> che parte da Milano e tu devi verificare quell'orario con quella
> timezone. Se tu volessi dire quante ore mancano alla partenza, puoi
> semplicemente calcolare la differenza usando il fuso orario del luogo di
> partenza, e questo puoi farlo dal server, non hai neanche bisogno di
> sapere la timezone del client.
>

Qua non ho capito invece


grazie
debharkock
ZER0 2 Nov 2014 16:23
On 02/11/14 15:59 , Domenico Pasella wrote:

[cut]
>>> - Il volo AZ1234 parte da Milano alle 23:00
>>> - Io mi collego alle 13:00 dall'Italia e avrò (23:00 - 13:00) un 10 ore
>>> - Nello stesso momento tu ti colleghi da Londra. Per te saranno le 12:00
quindi avrai (12:00 -23:00) 11 ore; questo è sbagliato in quanto anche per te
mancano 10 ore
>>
>> È un esempio fallace. Di certo non modifichi l'orario di partenza, visto
>> che parte da Milano e tu devi verificare quell'orario con quella
>> timezone. Se tu volessi dire quante ore mancano alla partenza, puoi
>> semplicemente calcolare la differenza usando il fuso orario del luogo di
>> partenza, e questo puoi farlo dal server, non hai neanche bisogno di
>> sapere la timezone del client.

> Qua non ho capito invece

Partiamo dalla fine, in due esempi.
a) Una pagina che, quando la apri, ti dice quanto manca a Natale.
b) Una pagina che, quando la apri, ti mostra dei voli, e quanto manca
alla loro partenza.

Nell'esempio "a", l'evento si verifica sempre alla stessa data a
*prescindere* dal luogo: ovvero alla mezzanotte del 25 Dicembre. Che sia
di Roma, o San Francisco.
Questo significa che l'evento è legato alla timezone di chi apre la
pagina: se apro la pagina a Roma, il calcolo deve essere fatto in base
al fuso orario di Roma. Se la apro da San Francisco, deve essere fatto
col fuso orario di San Francisco.
In pratica, l'evento si verifica in *momenti* differenti, perché la data
è *relativa* (alla zona in cui siamo) e non *assoluta*.
In soldoni, le ore che mancano a Natale sono diverse in base al dove
sono nel mondo quando apro la pagina.

E fin qui, ci siamo capiti.

Nell'esempio "b" invece, l'evento si verifica in un *momento* ben
specifico. L'aereo parte da Milano alle 23:00. L'aereo, a differenza di
Natale, partirà in quello *specifico* momento, a prescindere che io apra
la pagina da Roma, Londra, o San Francisco.
Questo significa che le ore che mancano alla partenza, sono le stesse a
*prescindere* da dove apro la pagina.
Ma se sono le stesse a prescindere da dove apro la pagina, non vuol dire
allora che il mio luogo, cioè il client, è irrilevante nell'equazione?

Se quando apro la pagina, voglio mostrare quante ore mancano alla
partenza, basta il server: in pratica il server prenderà l'ora corrente
usando il fuso orario dell'evento (in quel caso, Milano), e calcolerà la
differenza tra i due. In questo modo, che io apra la pagina da Roma,
Londra o San Francisco, è irrilevante. Il client non entra in gioco.
Quel che conta è solo la differenza tra ora e il momento della partenza,
dove "ora" e il "momento della partenza" usano il medesimo fuso orario.

Spero sia piú chiaro.
Ovviamente sto discutendo degli esempi proposti, se uno volesse fare
un'applicazione di Calendario le cose sarebbero molto piú complesse.

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio JavaScript | Tutti i gruppi | it.comp.lang.javascript | Notizie e discussioni javascript | Javascript Mobile | Servizio di consultazione news.