Necesito guardar una fecha: 16 de febrero de 2017 5PM HST.

La base de datos (Parse) solo acepta JS Date. Y, mi zona horaria del sistema es IST. JS Date no tiene la capacidad de guardar en una zona horaria diferente.

Para superar esto, guardo tres variables. Fecha (calculada, cálculo explicado a continuación), compensación de zona horaria, zona horaria

La fecha se convierte usando moment.tz(DateObject, Timezone).

Pero, al llamar a la función toDate (), parece volver a cambiarlo a IST.

En un examen más detallado, encontré una clave _d para el objeto Moment, que parece tener la fecha y hora convertida en IST.

Pero, parece que no puedo hacer que funcione.

Cualquier pista sería útil.

0
ankitjain11 17 feb. 2017 a las 15:30

3 respuestas

La mejor respuesta

¿Qué quiere decir con "guardar en una zona horaria diferente"? La zona horaria es una preocupación de la capa de presentación. 01:00+00:00 y 02:00-01:00 son al mismo tiempo, presentados de manera diferente. El punto en el tiempo se representa usando un número entero grande (la marca de tiempo), y esta marca de tiempo es lo que debe guardar.

Cuando carga esta marca de tiempo y desea volver a usarla: puede presentarla desde la perspectiva de cualquier zona que elija.

//-- parsing the user input...

// parse HST (Honolulu Standard Time) date-time
var inputTime = moment.tz("February 16th, 2017 5PM", "MMMM Do, YYYY hA", "Pacific/Honolulu");

// in case you want to double-check that it parsed correctly
var inputTimePrettyPrinted = inputTime.format(); // "2017-02-16T17:00:00-10:00"

// grab timestamp
var timestamp = +inputTime;

//-- presenting the stored timestamp in Indian Standard Time...

// install a timezone definition for Indian Standard Time
moment.tz.add("Asia/Calcutta|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0");
moment.tz.link("Asia/Calcutta|Asia/Kolkata");

var timePresentedInIndianTime = moment(timestamp).tz("Asia/Calcutta");

var indianTimePrettyPrinted = timePresentedInIndianTime.format(); // "2017-02-17T08:30:00+05:30"
2
Birchlabs 17 feb. 2017 a las 13:03

Necesita usar moment tz para agregar a HST

var now = new Date();
moment.tz.add('HST|HST|a0|0|');
console.clear();
var converted = moment(now).tz("HST").format();
console.log(now);

console.log(converted);

Aquí está el enlace jsfiddle

Consulte console.log para obtener la respuesta.

Fri Feb 17 2017 18:24:49 GMT+0530 (India Standard Time) //IST time
2017-02-17T02:54:49-10:00 // HST Time
0
Alaksandar Jesus Gene 17 feb. 2017 a las 12:57

Prueba algo como esto:

var UTC = new Date();
var UTC = UTC.getTime() // Get UTC Timestamp

var IST = new Date(date); // Clone UTC Timestamp
IST.setHours(IST.getHours() + 5); // set Hours to 5 hours later
IST.setMinutes(IST.getMinutes() + 30); // set Minutes to be 30 minutes later

var EST = new Date(date); // Clone date
EST.setHours(EST.getHours() - 4); // set EST to be 4 hour earlier

Puede cambiar según su necesidad.

0
Akash Thakkar 17 feb. 2017 a las 12:41