Я создаю приложение, которое позволяет вам определять события с временными рамками. Я хочу автоматически заполнить дату окончания, когда пользователь выбирает или изменяет дату начала. Однако я не могу понять, как получить разницу между двумя значениями, а затем как создать новую дату окончания, используя эту разницу.

В JavaScript даты могут быть преобразованы в число миллисекунд с момента epoc, вызвав getTime() метод или Или вы можете использовать

. Чтобы получить разницу, просто вычтите две даты.

Чтобы создать новую дату на основе разницы, просто укажите количество миллисекунд в конструкторе.

var oldBegin = ...
var oldEnd = ...
var newBegin = ...

var newEnd = new Date(newBegin   oldEnd - oldBegin);

Это должно сработать

I Вместо этого используйте любой из методов, ранее упомянутых другими: свойство : исправлена ​​ошибка, указанная @bdukes

I Вместо этого используйте любой из методов, ранее упомянутых другими: свойство :

Для объяснения поведения, oldBegin, oldEnd и newBegin Браузер анализирует исходный код HTML и запускает отложенные сценарии. Date экземпляры. Вызов операторов и - вызовет автоматическое приведение Javascript и автоматически вызовет метод-прототип valueOf() этих объектов. Бывает, что метод valueOf() реализован в объекте Date как вызов getTime() Глядя на вывод

. Итак, в основном: date.getTime() === date.valueOf() === (0 date) === ( date)

JavaScript отлично поддерживает разницу в датах из коробки

var msMinute = 60*1000, 
    msDay = 60*60*24*1000,
    a = new Date(2012, 2, 12, 23, 59, 59),
    b = new Date("2013 march 12");


console.log(Math.floor((b - a) / msDay)   ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute)   ' full minutes between');

Теперь некоторые подводные камни. Попробуйте это:

console.log(a - 10);
console.log(a   10);

Поэтому, если вы рискуете добавить число и дату, конвертируйте дату в number Редактирование прототипа массива может быть вредным. Здесь это простая функция, чтобы сделать работу.

console.log(a.getTime() - 10);
console.log(a.getTime()   10);

. Мой первый пример демонстрирует мощь объекта Date, но на самом деле он выглядит как бомба замедленного действия

См. JsFiddle DEMO для вашего HTML-кода:

    var date1 = new Date();    
    var date2 = new Date("2025/07/30 21:59:00");
    //Customise date2 for your required future time

    showDiff();

function showDiff(date1, date2){

    var diff = (date2 - date1)/1000;
    diff = Math.abs(Math.floor(diff));

    var days = Math.floor(diff/(24*60*60));
    var leftSec = diff - days * 24*60*60;

    var hrs = Math.floor(leftSec/(60*60));
    var leftSec = leftSec - hrs * 60*60;

    var min = Math.floor(leftSec/(60));
    var leftSec = leftSec - min * 60;

    document.getElementById("showTime").innerHTML = "You have "   days   " days "   hrs   " hours "   min   " minutes and "   leftSec   " seconds before death.";

setTimeout(showDiff,1000);
}

Если вам не важен компонент времени, вы можете использовать

<div id="showTime"></div>

для установки части даты. .getDate() и .setDate() Итак, чтобы установить конечную дату через 2 недели после начальной, сделайте что-то вроде этого:

Чтобы вернуть разницу (в днях) между двумя датами, сделайте следующее:

function GetEndDate(startDate)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate() 14);
    return endDate;
}

Наконец, давайте изменим первую функцию поэтому он может принимать значение, возвращаемое 2nd как параметр:

function GetDateDiff(startDate, endDate)
{
    return endDate.getDate() - startDate.getDate();
}

Спасибо @

function GetEndDate(startDate, days)
{
    var endDate = new Date(startDate.getTime());
    endDate.setDate(endDate.getDate()   days);
    return endDate;
}

Винсент Роберт , я остановился на вашем базовом примере, хотя на самом деле это В зависимости от ваших потребностей, эта функция рассчитает разница между 2 днями и возвращаем результат в десятичных днях. newBegin oldEnd - oldBegin и их

    // don't update end date if there's already an end date but not an old start date
    if (!oldEnd || oldBegin) {
        var selectedDateSpan = 1800000; // 30 minutes
        if (oldEnd) {
            selectedDateSpan = oldEnd - oldBegin;
        }

       newEnd = new Date(newBegin.getTime()   selectedDateSpan));
    }

При использовании moment.js есть более простое решение, которое даст вам разницу в днях в одной строке кода.

// This one returns a signed decimal. The sign indicates past or future.

this.getDateDiff = function(date1, date2) {
    return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
}

// This one always returns a positive decimal. (Suggested by Koen below)

this.getDateDiff = function(date1, date2) {
    return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
}

Дополнительную информацию можно найти на странице

moment(endDate).diff(moment(beginDate), 'days');

moment.js Приветствия, расширенный код альтернативной модификации Мигеля

.

function compare()
{
  var end_actual_time    = $('#date3').val();

  start_actual_time = new Date();
  end_actual_time = new Date(end_actual_time);

  var diff = end_actual_time-start_actual_time;

  var diffSeconds = diff/1000;
  var HH = Math.floor(diffSeconds/3600);
  var MM = Math.floor(diffSeconds600)/60;

  var formatted = ((HH < 10)?("0"   HH):HH)   ":"   ((MM < 10)?("0"   MM):MM)
  getTime(diffSeconds);
}
function getTime(seconds) {
  var days = Math.floor(leftover / 86400);

  //how many seconds are left
  leftover = leftover - (days * 86400);

  //how many full hours fits in the amount of leftover seconds
  var hours = Math.floor(leftover / 3600);

  //how many seconds are left
  leftover = leftover - (hours * 3600);

  //how many minutes fits in the amount of leftover seconds
  var minutes = leftover / 60;

  //how many seconds are left
  //leftover = leftover - (minutes * 60);
  alert(days   ':'   hours   ':'   minutes);
}
function checkdate() {
    var indate = new Date()
    indate.setDate(dat)
    indate.setMonth(mon - 1)
    indate.setFullYear(year)

    var one_day = 1000 * 60 * 60 * 24
    var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day))
    var str = diff   " days are remaining.."
    document.getElementById('print').innerHTML = str.fontcolor('blue')
}

Http://jsfiddle.net/vvGPQ/48/

этот код заполняет продолжительность учебного года, когда вы вводите дату начала и конечную дату (квалифицированная начисленная дата) обучения и проверяете, если продолжительность меньше года, если да, в сообщении, учитывающем сообщение, есть три элемента ввода: первый { *} и секунда

showDiff();

function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");   
var date2 = new Date();
//Customise date2 for your required future time

var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));

var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;

var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;    

var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;

var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;

var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;




document.getElementById("showTime").innerHTML = "You have "   years   " years "  month   " month "   days   " days "   hrs   " hours "   min   " minutes and "   leftSec   " seconds the life time has passed.";

setTimeout(showDiff,1000);
}
<html>
<head>
<script>
function dayDiff()
{
     var start = document.getElementById("datepicker").value;
     var end= document.getElementById("date_picker").value;
     var oneDay = 24*60*60*1000; 
     var firstDate = new Date(start);
     var secondDate = new Date(end);    
     var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    document.getElementById("leave").value =diffDays ;
 }
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>

и третья txtFromQualifDate Если вы используете объекты Date, а затем используете функцию txtQualifDate для обеих дат, она даст вам соответствующее время с 1 января 1970 года в числовом значении. Затем вы можете получить разницу между этими числами. txtStudyYears

Он покажет результат числа лет с оператором дроби

function getStudyYears()
    {
        if(document.getElementById('txtFromQualifDate').value != '' && document.getElementById('txtQualifDate').value != '')
        {
            var d1 = document.getElementById('txtFromQualifDate').value;

            var d2 = document.getElementById('txtQualifDate').value;

            var one_day=1000*60*60*24;

            var x = d1.split("/");
            var y = d2.split("/");

            var date1=new Date(x[2],(x[1]-1),x[0]);

            var date2=new Date(y[2],(y[1]-1),y[0])

            var dDays = (date2.getTime()-date1.getTime())/one_day;

            if(dDays < 365)
            {
                alert("the date between start study and graduate must not be less than a year !");

                document.getElementById('txtQualifDate').value = "";
                document.getElementById('txtStudyYears').value = "";

                return ;
            }

            var dMonths = Math.ceil(dDays / 30);

            var dYears = Math.floor(dMonths /12)   "."   dMonths % 12;

            document.getElementById('txtStudyYears').value = dYears;
        }
    }

Если это вам не поможет, ознакомьтесь с полной документацией: getTime() http://www.w3schools.com/jsref/jsref_obj_date.asp

Нижеприведенный код вернет фьючерсы, оставшиеся с сегодняшнего дня. Дата. Зависимости:

jQuery и MomentJs.

Это то, что я сделал в своей системе. JavaScript — возможно ли использовать JS, чтобы открыть HTML-выбор, чтобы показать его список опций? — Переполнение стека

var getDaysLeft = function (date) {
  var today = new Date();
  var daysLeftInMilliSec = Math.abs(new Date(moment(today).format('YYYY-MM-DD')) - new Date(date));
  var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24);   
  return daysLeft;
};

getDaysLeft('YYYY-MM-DD');
var getDaysLeft = function (date1, date2) {
   var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
   var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);   
   return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);

Можно ли использовать JavaScript, чтобы открыть выбор HTML, чтобы показать его список параметров?

var startTime=("08:00:00").split(":");
var endTime=("16:00:00").split(":");
var HoursInMinutes=((parseInt(endTime[0])*60) parseInt(endTime[1]))-((parseInt(startTime[0])*60) parseInt(startTime[1]));
console.log(HoursInMinutes/60);