【问题标题】:Calculate hours and minutes between 2 date and time计算 2 个日期和时间之间的小时和分钟
【发布时间】:2015-10-02 00:02:02
【问题描述】:

希望有人可以在这里帮助我。我有一个表单,我需要用户输入事件的开始时间和结束时间。一旦他们输入了信息,他们将手动输入两个日期时间之间的持续时间。我正在尝试使用 jquery 自动执行此过程,并获得了一个名为 moment http://momentjs.com/ 的插件。我希望它能让我更简单地计算 2 个日期时间,但我必须承认我对 javascript 的 jquery 不太了解,以了解它是如何组合在一起的。

另外,我还需要仅在其为空时才计算持续时间字段。我创建了一个 jsfiddle http://jsfiddle.net/FLhpq/2044/。这将是我能复制我的场景的最接近的方法。这是我到目前为止的代码。

$(document).ready(function() {
    var start_time = $('input[title="start time"]').val();
    var end_time = $('input[title="End time"]').val();
    var d1 = moment(start_time, "YYYY-MM-DD HH:mm");
    var d2 = moment(end_time, "YYYY-MM-DD HH:mm");
    var duration = d2.diff(d1, 'hours')+1;
    var input = $('input[title="duration"]').val();
    if(input == ''){
         $('#duration').val('duration');
 });    

【问题讨论】:

标签: javascript jquery


【解决方案1】:

我相信你有正确的计算。我认为这只是视觉执行。

我将以下小提琴放在一起,以完成我认为您正在尝试做的事情; jsfiddle.net/....

    $(document).ready(function() {
      var start_time = $('.start').val(),
        end_time = $('.end').val(),
        d1 = moment(start_time, "YYYY-MM-DD HH:mm"),
        d2 = moment(end_time, "YYYY-MM-DD HH:mm"),
        duration = d2.diff(d1, 'hours') + 1,
        $input = $('.duration');
      if ($input.val() === ''){
        $input.val(duration);
      }
   });

在你原来的小提琴中。没有 ID 为“duration”的元素。同样对于抓取元素,请尝试使用选择器的类名。我在输入中添加了一些简单的类,以便使用 jQuery 更轻松地获取它们。

从这里开始,如果您还想额外显示分钟/秒,您可以使用一些 momentjs 的内置功能(例如 to)来更改您的持续时间逻辑。

我相信以下内容;

duration = d1.to(d2) // RETURNS MOMENT

希望对你有所帮助!

【讨论】:

  • 你也可以人性化输入值:$input.val(moment.duration(duration, 'hours').humanize());
  • 是的,当然。不试图增强 OP 的实施。只需提供有关绑定 UI 的指示 ;)
【解决方案2】:

你应该看看 this

         var a = moment([2007, 0, 28]);
         var b = moment([2007, 0, 29]);
         a.to(b);                     // "in a day"

或者

          var a = moment([2007, 0, 29]);
          var b = moment([2007, 0, 28]);
          a.diff(b, 'days') // 1

【讨论】:

    【解决方案3】:

    这将显示小时(和分钟),并在 duration 字段为空时显示:

    $(document).ready(function() {
        if($('#duration').val() === '') {
            updateDuration($('#start_time').val(), $('#end_time').val());
        }
    
        $('#start_time').on('change keyup', function() {
            updateDuration($('#start_time').val(), $('#end_time').val());
        });
    
        $('#end_time').on('change keyup', function() {
            updateDuration($('#start_time').val(), $('#end_time').val());
        });
    
        function updateDuration(startTime, endTime) {
            var ms = moment(endTime, 'YYYY/MM/DD HH:mm:ss').diff(moment(startTime, 'YYYY/MM/DD HH:mm:ss')),
                dt = moment.duration(ms),
                h  = Math.floor(dt.asHours()),
                m  = moment.utc(ms).format('mm');
    
            $('#duration').val(h + ' hours, ' + m + ' minutes');
        }
    });
    

    如果用户更改值,这也会更新 duration 输入字段。

    你可以在这里看到一个工作的 JSFiddle:

    http://jsfiddle.net/divspace/9x0s01oy/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2014-10-19
      • 2014-03-08
      • 2012-10-26
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多