【问题标题】:getting invalied difference between two DateTime picker using 'momentjs'使用'moment js'在两个日期时间选择器之间获取无效差异
【发布时间】:2017-09-01 07:08:51
【问题描述】:

我有两个 DateTime 选择器,即 recodeStartTime 和 recodeEndTime,我想使用 moment.js 显示上述时间之间的总小时数。但是,当我尝试使用以下方法检索差异时:

var calculateTime = function () {
    var startTime = $('#recordStartTime').val();
    var endTime   = $('#recordEndTime').val();
    var totalTime = moment.utc(moment(endTime,"YYYY-MM-DD HH:mm:ss").diff(moment(startTime,"YYYY-MM-DD HH:mm:ss"))).format("HH:mm:ss");
    $('#recordRegularHours').val(totalTime);
};

例如:recodeStartTime = 2017-09-01 08:40 AM ,recodeEndTime = 2017-09-01 05:45 PM

结果:21:05:00

它正在返回无效的时差。如何获得两个 Moments 之间的小时数差异?

【问题讨论】:

  • 您的代码为21:05:00 提供recodeStartTime = 2017-09-01 08:40 AM , recodeEndTime = 2017-09-01 05:45 PM,您的问题到底是什么?
  • 差别应该是 09:05:00 @VincenzoC

标签: jquery momentjs datetimepicker


【解决方案1】:

您可以从moment diff的输出创建一个duration,然后您可以使用moment-duration-format插件。该插件将format 方法添加到持续时间,因此您可以使用format('HH:mm:ss') 获得所需格式的输出(在您的情况下为09:05:00)。

这是一个工作示例:

var calculateTime = function () {
  var startTime = $('#recordStartTime').val();
  var endTime   = $('#recordEndTime').val();

  var diff = moment(endTime,"YYYY-MM-DD HH:mm A").diff(moment(startTime,"YYYY-MM-DD HH:mm A"));
  var dur = moment.duration(diff);
  var totalTime = dur.format('HH:mm:ss')
  $('#recordRegularHours').val(totalTime);
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

<input type="text" id="recordStartTime" value="2017-09-01 08:40 AM">
<input type="text" id="recordEndTime" value="2017-09-01 05:45 PM">

<input type="text" id="recordRegularHours" readonly>

<button type="button" onclick="calculateTime()">Calulate Diff</button>

请注意,您必须使用"YYYY-MM-DD HH:mm A" 而不是"YYYY-MM-DD HH:mm:ss" 才能正确解析2017-09-01 08:40 AM 等输入。

如果不想添加 moment-duration-format 插件,可以使用 duration getters(hours()minutes()seconds())。

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2020-03-22
    • 2017-03-27
    相关资源
    最近更新 更多