[Javascript] Trasformare secondi a giorni, ore, minuti

vasomik

Nuovo Utente
14 Mar 2017
31
0
6
Ciao a tutti ho il seguente problema:

devo trasformare dei secondi in ore, giorni e minuti partendo da due date.
Le date in questione sono:
19/02/2017 ore 7.44 (millisecondi 1487486640000)
31/03/2017 ore 4.23 (millisecondi 1490926980000)

Inizialmente le trasformo in millisecondi, che ho indicato sopra, li divido per mille per avere i secondi, da qui faccio la differenza tra i secondi per ottenere l'intervallo in secondi tra le date.

L'intervallo in secondi risulta essere: 3440340.

Da questo punto uso questo codice per ottenere i giorni, le ore, i minuti, ecc.
Codice:
giorni = Math.floor(intervallo / 86400);
secondi_resto = intervallo - (giorni * 86400);
ore = Math.floor(secondi_resto / 3600);
secondi_resto = intervallo - (giorni * 86400) - (ore * 3600);
minuti = Math.floor(secondi_resto / 60);
secondi_resto = intervallo - (giorni * 86400) - (ore * 3600) - (minuti * 60);

Da questo codice ottengo i seguenti risultati:

giorni: 39 ore: 19 minuti: 39

il calcolo che faccio io mi da un risultato differente e cioè:

giorni: 39 ore: 20 minuti: 39

Qualcuno sa aiutarmi?

vasomik
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, non ho capito molto.
A parte che la differenza tra i 2 time che hai postato non fa 3990340 ma 3440340, il calcolo che ti da un minuto in più come lo fai ?
 

vasomik

Nuovo Utente
14 Mar 2017
31
0
6
Ciao, non ho capito molto.
A parte che la differenza tra i 2 time che hai postato non fa 3990340 ma 3440340
Grazie per la risposta.
Ho digitato male il numero della differenza, è giusto il numero che hai scritto tu, lo correggo nel primo messaggio per chiarezza.

il calcolo che ti da un minuto in più come lo fai ?

Il calcolo che faccio io, con il quale ottengo un'ora in più è così:

1) dalle 7,44 alla mezzanotte del 19/2/2017 ci sono 16h 16m
2) conto i giorni interi dal 20/2/2017 al 30/3/2017 che sono 39
3) dalla mezzanotte del 31/03 alle 4,23 ci sono 4h 23m

a questo punto sommo le 16h 16m con 4h 23m, totale 20h 39m

Quindi 39 giorni 20 ore 39 minuti

vasomik
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
alle 4,23 si intende 4:23:00 secondi
il ventitreesimo minuto non è ancora iniziato quindi ne devi contare 22
ps
a no aspetta sto dicendo una cavolata fammi ragionare :)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
al 28 marzo abbiamo tirato avanti gli orologi di un'ora per via dell'ora legale e anche se ora non riesco a fare un ragionamento intelligente penso che la differenza sia dovuta a questo, quindi è giusto lo script che tiene conto di quell'ora persa.
 

vasomik

Nuovo Utente
14 Mar 2017
31
0
6
al 28 marzo abbiamo tirato avanti gli orologi di un'ora per via dell'ora legale e anche se ora non riesco a fare un ragionamento intelligente penso che la differenza sia dovuta a questo, quindi è giusto lo script che tiene conto di quell'ora persa.
Ho fatto delle prove, hi ragione tu, tutto é dovuto all'ora legale/solare.

1) 19/2 dalle 7,44 - 10/3 alle 4,23 il risultato é 18 gg 20 h 39 m
2) 19/2 dalle 7,44 - 26/3 alle 4,23 il risultato é 34 gg 20 h 39 m
3) 19/2 dalle 7,44 - 27/3 alle 4,23 il risultato é 35 gg 19 h 39 m
4) 19/2 dalle 7,44 - 28/3 alle 4,23 il risultato é 36 gg 19 h 39 m

5) 19/9 dalle 7,44 - 29/10 alle 4,23 il risultato é 39 gg 20 h 39 m
6) 19/9 dalle 7,44 - 30/10 alle 4,23 il risultato é 40 gg 21 h 39 m

Il discorso, come si vede dall'esempio, si verifica anche al ritorno dell'ora solare, fissata per il 29/10 alle 2.00.

Come posso gestire questa cosa?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma è strano, non mi viene in mente niente
con php il conto torna
PHP:
<?php

$data1 = new DateTime("2017-02-19 07:44:00");
$data2 = new DateTime("2017-03-26 04:23:00");
$diff = $data1->diff($data2);
echo $diff->days . " giorni " . $diff->h . " ore " . $diff->i . " minuti<br/>";

$data1 = new DateTime("2017-02-19 07:44:00");
$data2 = new DateTime("2017-03-27 04:23:00");
$diff = $data1->diff($data2);
echo $diff->days . " giorni " . $diff->h . " ore " . $diff->i . " minuti<br/>";
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
l'oggetto Date di javascript restituisce l'ora GMT
la funzione getTimezoneOffset() dovrebbe restituire la differenza tra l'ora locale e l'ora di Greenwich, forse si può sfruttare.
in effetti io non mi ero mai posto il problema
fai qualche prova con l'aiuto della console
Codice:
var time = new Date(2017, 1, 19, 7, 44, 0);
    console.log(time);
    console.log(time.getTime());
    console.log(time.getTimezoneOffset());
var time2 = new Date(2017, 2, 31, 4, 23, 0);
    console.log(time2);
    console.log(time2.getTime());
    console.log(time.getTimezoneOffset());
 

vasomik

Nuovo Utente
14 Mar 2017
31
0
6
Codice:
var time = new Date(2017, 1, 19, 7, 44, 0);
    console.log(time);
    console.log(time.getTime());
    console.log(time.getTimezoneOffset());
var time2 = new Date(2017, 2, 31, 4, 23, 0);
    console.log(time2);
    console.log(time2.getTime());
    console.log(time2.getTimezoneOffset());
Ho corretto il tuo codice, per il quale ti ringrazio, aggiungendo un 2 a fianco a time nell'ultima riga
Codice:
console.log(time2.getTimezoneOffset());
Questo il risultato:
VM254:2 Sun Feb 19 2017 07:44:00 GMT+0100 (CET)
VM254:3 1487486640000
VM254:4 -60
VM254:6 Fri Mar 31 2017 04:23:00 GMT+0200 (CEST)
VM254:7 1490926980000
VM254:8 -120

Effettivamente, guardando il risultato della terza e dell'ultima riga, c'è proprio la differenza di un'ora, l'ora incriminata....forse mettendo questi risultati in due variabili e confrontandole in degli if si può ottenere il risultato aggiungendo o togliendo 3600 secondi alla differenza tra i timestamp.

Ho scritto un'eresia?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
credo ci sia una soluzione molto più semplice ma per ora mi sfugge
ho trovato un sito che fa il calcolo con js, questo il risultato
Codice:
Start date:Sun Feb 19 2017 08:44:00 GMT+0100 (ora legale Europa occidentale)(epoch/unix time=1487490240)
End date:Fri Mar 31 2017 06:23:00 GMT+0200 (ora solare Europa occidentale)(epoch/unix time=1490934180)
Difference millisec=3443940000 equivalent to (decimal fraction):
.seconds =3443940
.minutes=57399
.hours=956.65
.days=39.860416666666666

3443940000 milliseconds is:
39 days,20 hours, 39 minutes, 0 seconds 0 milliseconds
se ci fai caso i suoi timestamp sono diversi da quelli che hai postato
peccato che l'autore ha offuscato il codice altrimenti si poteva dare una sbirciatina
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
forse ci siamo, fai qualche prova
Codice:
<script>
//    var time = new Date(2017, 1, 19, 7, 44, 0);
    var time = new Date("2017-02-19 07:44:00Z");
    console.log(time);
    console.log(time.getTime());
//    var time2 = new Date(2017, 2, 31, 4, 23, 0);
    var time2 = new Date("2017-03-31 04:23:00Z");
    console.log(time2);
    console.log(time2.getTime());
  
    var diffMs = (time2 - time); // milliseconds between
    var diffDays = Math.floor(diffMs / 86400000); // days
    var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
    var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
    alert(diffDays + " giorni, " + diffHrs + " ore, " + diffMins + " minuti");
</script>
 

vasomik

Nuovo Utente
14 Mar 2017
31
0
6
Mi scuso per il ritardo nella risposta.

Il codice che hai indicato funziona alla perfezione, grazie per l'aiuto.

Spero che questa discussione possa essere di aiuto anche ad altri, vista la particolarità della problematica.
 
Discussioni simili
Autore Titolo Forum Risposte Data
B Trasformare/convertire codice javascript in link URL Javascript 11
A trasformare un vbscript in javascript ..???? Javascript 4
M variabile javascript su link html Javascript 4
I Creare un banner temporaneo JavaScript Javascript 0
S Impossibile scorrere un oggetto in JavaScript Javascript 0
N Passare array da php a javascript PHP 5
L Quiz javascript funzionante da migliorare Javascript 0
P errore 404 con javascript Javascript 2
D aiuto funzioni javascript Javascript 1
M Upload immagine con javascript problemi con FormData() Javascript 1
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 1
F Creare elementi html con javascript Javascript 3
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
R Cerco supporto in programmazione javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4
A [Javascript] Scrittura su più campi contemporaneamente Javascript 18
F classic asp popolare combo box javascript Presentati al Forum 1
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
F [Javascript] comando innerHTML non funziona Javascript 5
alexice51 proggrammi per scrivere in javascript? Javascript 3
max1974 [Javascript] Accordion aria-exspanded Javascript 0

Discussioni simili