Подтвердить что ты не робот

Вычесть время с даты - момент js

Я имею, например, это datetime:

01:20:00 06-26-2014

и я хочу вычесть такое время:

00:03:15

после этого я хотел бы отформатировать результат следующим образом:

3 hours and 15 minutes earlier.

Как это сделать, используя moment.js?

edit. Я пробовал:

var time = moment( "00:03:15" );
var date = moment( "2014-06-07 09:22:06" );

date.subtract (time); 

но результат будет таким же, как date

Спасибо

4b9b3361

Ответ 1

Moment.subtract не поддерживает аргумент типа Moment - :

moment().subtract(String, Number);
moment().subtract(Number, String); // 2.0.0
moment().subtract(String, String); // 2.7.0
moment().subtract(Duration); // 1.6.0
moment().subtract(Object);

Простейшим решением является определение временной дельта как объекта:

// Assumes string is hh:mm:ss
var myString = "03:15:00",
    myStringParts = myString.split(':'),
    hourDelta: +myStringParts[0],
    minuteDelta: +myStringParts[1];


date.subtract({ hours: hourDelta, minutes: minuteDelta});
date.toString()
// -> "Sat Jun 07 2014 06:07:06 GMT+0100"

Ответ 2

Вы можете создать более чистую реализацию с помощью Moment.js Durations. Нет необходимости в ручном анализе.

var time = moment.duration("00:03:15");
var date = moment("2014-06-07 09:22:06");
date.subtract(time);
$('#MomentRocks').text(date.format())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.js"></script>
<span id="MomentRocks"></span>

Ответ 3

Я мог бы пропустить что-то в вашем вопросе здесь... но из того, что я могу собрать, используя subtract, это должно быть то, что вы хотите сделать:

var timeStr = "00:03:15";
    timeStr = timeStr.split(':');

var h = timeStr[1],
    m = timeStr[2];

var newTime = moment("01:20:00 06-26-2014")
    .subtract({'hours': h, 'minutes': m})
    .format('hh:mm');

var str = h + " hours and " + m + " minutes earlier: " + newTime;

console.log(str); // 3 hours and 15 minutes earlier: 10:05

$(document).ready(function(){    
     var timeStr = "00:03:15";
        timeStr = timeStr.split(':');

    var h = timeStr[1],
        m = timeStr[2];

    var newTime = moment("01:20:00 06-26-2014")
        .subtract({'hours': h, 'minutes': m})
        .format('hh:mm');

    var str = h + " hours and " + m + " minutes earlier: " + newTime;

    $('#new-time').html(str);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script>


<p id="new-time"></p>

Ответ 4

Майкл Ричардсон отлично. Если вы хотите вычесть даты (потому что Google укажет вам здесь, если вы его ищете), вы также можете сказать:

var date1 = moment( "2014-06-07 00:03:00" );
var date2 = moment( "2014-06-07 09:22:00" );

differenceInMs = date2.diff(date1); // diff yields milliseconds
duration = moment.duration(differenceInMs); // moment.duration accepts ms
differenceInMinutes = duration.asMinutes(); // if you would like to have the output 559

Ответ 5

Я использую moment.js http://momentjs.com/

var start = moment(StartTimeString).toDate().getTime();
var end = moment(EndTimeString).toDate().getTime();
var timespan = end - start;
var duration = moment(timespan);
var output = duration.format("YYYY-MM-DDTHH:mm:ss");