View Full Version : [JAVASCRIPT / PHP] La somma dei mesi non coincide fra i 2 linguaggi
jeremy.83
01-06-2018, 09:36
Saluti a tutti,
volevo proporre una specie di sondaggio
Ho questo codice PHP
$d = DateTime::createFromFormat("Y/m/d", "2017/08/30");
$interval = new DateInterval("P18M");
$d->add($interval);
E il suo "duale" in javascript
var d = moment("2017/08/30", "YYYY/MM/DD");
d.add(18, "months");
Vabbè qui ho usato moment, ma è la stessa cosa che usare Date e i suoi metodi
Entrambi gli spezzoni di codice aggiungono 18 mesi al 30 agosto 2017, utilizzando praticamente gli stessi oggetti che i 2 linguaggi mettono a disposizione
Il PHP mi ritorna 2 marzo 2019
Il Javascript ritorna invece 28 febbraio 2019
Ovviamente devo fare in modo che da entrambi i linguaggi si ottenga lo stesso risultato, e una soluzione l'avrei già trovata.
Senza dirvi cosa ho scelto io, vi chiedo quale scegliereste "a logica" fra i 2 risultati
Ciao!
$time = strtotime("2017/08/30");
$final = date("Y/m/d", strtotime("+18 month", $time));
dà lo stesso risultato?
e in js ?
var dt1 = new Date(2017, 08, 30);
var dt2 = dt1.setMonth(dt1.getMonth()+18);
jeremy.83
01-06-2018, 12:11
$time = strtotime("2017/08/30");
$final = date("Y/m/d", strtotime("+18 month", $time));
dà lo stesso risultato?
e in js ?
var dt1 = new Date(2017, 08, 30);
var dt2 = dt1.setMonth(dt1.getMonth()+18);
In PHP, come immaginavo, usare functional o object oriented il risultato non cambia, si ottiene sempre 2 marzo 2019
In Javascript, con quel codice che mi hai quotato, fatte alcune modifiche perchè setMonth non ritorna un oggetto Date (ma vabbè, presumo tu abbia scritto il codice così a getto), addirittura mi propone 30 marzo 2019
In generale non conviene utilizzare l'oggetto puro javascript Date perchè si porta dietro mille problemi, come questo, ma conviene usare lib come Moment.js o Date.js, come ho effettivamente usato.
La domanda rimane aperta
Saluti
Per prima cosa va chiarito che soluzione ti aspetti, nella vita di tutti giorni dire 18 mesi dopo il 30 agosto 2017 vuol dire il 28 febbraio 2019
Quindi il risultato corretto sarebbe quello di Javascript con Moment.js...
jeremy.83
04-06-2018, 09:17
Per prima cosa va chiarito che soluzione ti aspetti, nella vita di tutti giorni dire 18 mesi dopo il 30 agosto 2017 vuol dire il 28 febbraio 2019
Quindi il risultato corretto sarebbe quello di Javascript con Moment.js...
Anch'io la penso esattamente come te, e infatti ho adattato il PHP in modo che si comporti come il javascript.
Il mio intento era di verificare quanti siamo a pensarla allo stesso modo, e magari una risposta al perchè PHP si comporti in questa maniera.
Ciao,
sì ho scritto ovviamente senza provarlo (copia incolla al volo)
allora, per me è "giusto" php o meglio per avere la stessa cosa bisogna farla in modo differente.
tu stai cercando una data + n mesi, ma non è l'inizio mese.
Quindi dovresti cercare ad esempio + 19 mesi - 1 giorno, no?
se è questo quello che vuoi (ovvero il 28 o 29 febbraio)
probabilmente il comodissimo moment.js lo fa da solo
a memoria non so assolutamente chi fa cosa e come, guardo di volta in volta in base alla necessità, sicuramente librerie come moment.sj in php non ci sono ma non significa che non si possano far ele cose :P
spero di averti aiutato, scusa il ritardo
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.