Uso los marcos Moment.js y Moment-Timezone, y tengo un objeto de fecha Moment.js que está explícitamente en la zona horaria UTC. ¿Cómo puedo convertir eso a la zona horaria actual del navegador?
var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???Así que estaría bien si pudiera averiguar la zona horaria local de los usuarios; o, alternativamente, me gustaría convertir el objeto de fecha en otro objeto de datos que solo use la "zona horaria local", sin importar cuál sea realmente.
No necesita usar moment-timezone para esto. La biblioteca principal de moment.js tiene una funcionalidad completa para trabajar con UTC y la zona horaria local.
var testDateUtc = moment.utc("2015-01-30 10:00:00"); var localDate = moment(testDateUtc).local();Desde allí puede usar cualquiera de las funciones que podría esperar:
var s = localDate.format("YYYY-MM-DD HH:mm:ss"); var d = localDate.toDate(); // etc... Tenga en cuenta que al pasar testDateUtc , que es un objeto de moment , de vuelta al constructor moment() , crea un clon . De lo contrario, cuando llamaste a .local() , también cambiaría el valor testDateUtc , en lugar de solo el valor localDate . Los momentos son mutables .
También tenga en cuenta que si su entrada original contiene un desplazamiento de zona horaria como +00:00 o Z , puede analizarlo directamente con moment . No necesita usar .utc o .local . Por ejemplo:
var localDate = moment("2015-01-30T10:00:00Z");var dateFormat = 'YYYY-DD-MM HH:mm:ss'; var testDateUtc = moment.utc('2015-01-30 10:00:00'); var localDate = testDateUtc.local(); console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00Esto es lo que hice:
var timestamp = moment.unix({{ time }}); var utcOffset = moment().utcOffset(); var local_time = timestamp.add(utcOffset, "minutes"); var dateString = local_time.fromNow(); Donde {{ time }} es la marca de tiempo utc.