JavaScript 从当地午夜获取 UTC

JavaScript get UTC from local midnight

我有一个来自 Bootstrap DateTimePicker $('#datetimepicker').find("input").val() 的日期,格式为“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>

我正在尝试使用 Moment js:

获取选定日期午夜的 UTC 日期和时间
moment.utc($('#datetimepicker').find("input").val()).tz(timezone).format('YYYY-MM-DD HH:mm:ss')

例如,选择器的开始日期是 01/21/2022timezoneAmerica/Phoenix,即 UTC-7

我应该有 2022-01-21 07:00:00 但我的代码 returns 2022-01-20 17:00:00.

我做错了什么?有没有办法只知道时区就可以在 00:00 时间获取一天的 UTC 时间?

您必须先创建本地时区的时间戳,然后将其转换为 UTC。你正在做相反的事情。也就是说,如果我拆分您的代码片段,您将执行以下操作

let thedate = $('#datetimepicker').find("input").val();
let utcdate = moment.utc(thedate);
let localdate = utcdate.tz(timezone);

因此,时区偏移当然是按错误的方向添加的...

尝试以下方法

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">