Tengo una fecha que proviene de un Bootstrap DateTimePicker $('#datetimepicker').find("input").val() que tiene el formato "mm/dd/yyyy".
<div class='input-group date' id='datetimepicker'> <form autocomplete="off" onkeydown="return event.key != 'Enter';"> <input type='text' autofill="off" readonly class="form-control" /> </form> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> Estoy tratando de obtener la fecha y hora UTC para la fecha seleccionada, a la medianoche, usando Moment js :
moment.utc($('#datetimepicker').find("input").val()).tz(timezone).format('YYYY-MM-DD HH:mm:ss') Por ejemplo, la fecha de inicio del selector es 01/21/2022 y la timezone es America/Phoenix que es UTC-7 .
Debería tener 2022-01-21 07:00:00 pero mi código devuelve 2022-01-20 17:00:00 .
¿Qué estoy haciendo mal? ¿Hay alguna manera de obtener la hora UTC de un día a las 00:00, simplemente conociendo la zona horaria?
Primero debe crear la marca de tiempo en su zona horaria local y luego convertirla a UTC. Lo estás haciendo al revés. Es decir, si divido su fragmento de código, está haciendo lo siguiente
let thedate = $('#datetimepicker').find("input").val(); let utcdate = moment.utc(thedate); let localdate = utcdate.tz(timezone);Por lo tanto, el desplazamiento de la zona horaria se agrega, por supuesto, en la dirección incorrecta...
Prueba lo siguiente
function getTime() { let thedate = $('#thedate').val(); console.log(thedate) // create a timestamp in the respective timezone let localdate = moment.tz(thedate, "America/Phoenix"); // convert it to utc let utcdate = localdate.utc(); // format the timestamp console.log(utcdate.format("YYYY-MM-DD HH:mm:ss")); } <script src="https://momentjs.com/downloads/moment.js"></script> <script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input id="thedate" type="date"> <input type="button" onClick="getTime()" value="Get Time">