【问题标题】:How to get a UTC timestamp from bootstrap-datepicker?如何从 bootstrap-datepicker 获取 UTC 时间戳?
【发布时间】:2019-05-02 00:50:49
【问题描述】:

如何让 bootstrap-datepicker 返回 UTC 时间戳而不是基于用户时区的时间戳?

我使用的是 bootstrap-datepicker 的 1.8.0 版

这是一个示例,它显示了在选择日期时 bootstrap-datepicker 返回的时间戳:

HTML

<div class="container">
  <div class="row">
    <div class="col-sm-6">
      <div class="input-group date">
        <input type="text" class="form-control" id="js-date">
        <div class="input-group-addon">
          <span class="glyphicon glyphicon-th"></span>
        </div>
      </div>
    </div>
  </div>
  <div class="row">
    <span id="timestamp-output"></span>
  </div>
</div>

JavaScript

$(document).ready(function() {
  $('#js-date').datepicker();
});

$('#js-date').datepicker().on('changeDate', function (ev) {
  $('#timestamp-output').text(ev.date.getTime());
});

小提琴示例

bootstrap-datepicker example

输出

当您运行示例并选择日期 11/29/2018 时,显示的时间戳为 1543478400000,对应于:

格林威治标准时间:2018 年 11 月 29 日星期四上午 8:00:00

我需要的是让它返回时间戳 1543449600000,它对应于:

格林威治标准时间:2018 年 11 月 29 日星期四上午 12:00:00

总结

bootstrap-datepicker 中是否有此配置选项?或者也许是某种可靠的方法将返回的本地化时间戳转换为 UTC 时间戳?

【问题讨论】:

标签: javascript twitter-bootstrap timestamp utc bootstrap-datepicker


【解决方案1】:

您可能想查看Moment.js已更新我将本地时间戳转换为 UTC 时间戳。

$(document).ready(function() {
  $('#js-date').datepicker();
});

$('#js-date').datepicker().on('changeDate', function (ev) {
  
  var datetime = new Date(ev.date.getTime());
  // Convert local timestamp to UTC timestamp
  var local = moment(datetime).valueOf();
  var utc = (moment(datetime).add(-(moment().utcOffset()), 'm'));
  utc = moment.parseZone(utc).utc().valueOf();
  
  $('#timestamp-local').text('Local Timestamp is ' + local);
  $('#timestamp-utc').text('UTC Timestamp is ' + utc);
  
  console.log('UTC Offset is ' + moment().utcOffset());
});
<script src="https://rawgit.com/moment/moment/2.22.2/min/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.js"></script>

<div class="container">
  <div class="row">
    <div class="col-sm-6">
      <div class="input-group date">
        <input type="text" class="form-control" id="js-date">
        <div class="input-group-addon">
          <span class="glyphicon glyphicon-th"></span>
        </div>
      </div>
    </div>
  </div>
  <div class="row">
    <span id="timestamp-local"></span><br/>
    <span id="timestamp-utc"></span>
  </div>
</div>

【讨论】:

    【解决方案2】:

    根据this 文档调用:

    getUTCDate()

    也通过 Javascript:

    var date = new Date(ev.date.getTime() + (60000 * date.getTimezoneOffset()));

    【讨论】:

    • 当我使用 getUTCDate() 而不是 getTime() 时,它只输出 28,这显然是一个月中的某一天。我需要与完整日期相对应的 UTC 时间戳
    猜你喜欢
    • 2014-11-21
    • 2018-02-12
    • 1970-01-01
    • 2011-05-21
    • 2012-11-11
    • 2014-10-25
    • 2019-07-22
    • 2015-01-08
    • 2014-03-31
    相关资源
    最近更新 更多