В JavaScript даты могут быть преобразованы в количество миллисекунд, прошедших с момента начала эпохи, путем вызова getTime()
метода или просто использования даты в числовом выражении.
Чтобы получить разницу, просто вычтите две даты.
Чтобы создать новую дату на основе разницы, просто передайте количество миллисекунд в конструкторе.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
Это должно работать
РЕДАКТИРОВАТЬ : исправлена ошибка, указанная @bdukes
ИЗМЕНИТЬ :
Для объяснения поведения, oldBegin
, oldEnd
и newBegin
являются Date
экземплярами. Вызов операторов +
и -
вызовет автоматическое преобразование Javascript и автоматически вызовет valueOf()
метод прототипа этих объектов. Бывает, что valueOf()
метод реализован в Date
объекте как вызов getTime()
.
Итак, в основном: date.getTime() === date.valueOf() === (0 + date) === (+date)
Date
объектами? Трудно сказать, к какому типу они должны относиться, поскольку объявление переменной здесь опущено.JavaScript отлично поддерживает разницу дат из коробки
Теперь о подводных камнях. Попробуй это:
Поэтому, если у вас есть риск добавить число и дату, конвертируйте Date
number
напрямую.Мой первый пример демонстрирует мощь объекта Date, но на самом деле он выглядит как бомба замедленного действия.
источник
-
приводит аргументы к числу, поэтому Date возвращает значение времени.+
Оператор перегружен, поэтому , возможно , сделать добавление, принуждение к номеру или конкатенации. Поскольку в этом случае даты приводятся к String,+
выполняется конкатенация. Путаница не в объекте Date, а в операторах перегрузки.См. JsFiddle DEMO
для вашего HTML-кода:
источник
Если вас не волнует компонент времени, вы можете использовать
.getDate()
и,.setDate()
чтобы просто установить часть даты.Итак, чтобы установить дату окончания на 2 недели после даты начала, сделайте что-то вроде этого:
Чтобы вернуть разницу (в днях) между двумя датами, сделайте следующее:
Наконец, давайте изменим первую функцию, чтобы она могла принимать значение, возвращаемое второй функцией, в качестве параметра:
источник
GetDateDiff()
сломает месячные барьеры. Например, 2011/04/26 и 2011/05/01 вернут -25, но смещение должно быть 5 дней.Спасибо @ Винсент Роберт , в итоге я использовал ваш базовый пример, хотя на самом деле это так
newBegin + oldEnd - oldBegin
. Вот упрощенное конечное решение:источник
getTime
а иногда нетВ зависимости от ваших потребностей эта функция вычислит разницу между двумя днями и вернет результат в десятичном формате.
источник
Math.abs()
вызов, и вы всегда получите положительное десятичное число.date.getTime()
чтобы получить время в будущем / прошлом. `var nextMinute = новая дата (someDate.getTime () + 60 * 1000);Если вы используете moment.js, есть более простое решение, которое даст вам разницу в днях в одной строке кода.
Дополнительную информацию можно найти на странице moment.js
Ура, Мигель
источник
источник
источник
альтернативная модификация расширенного кода ..
http://jsfiddle.net/vvGPQ/48/
источник
источник
этот код заполняет продолжительность учебного года, когда вы вводите дату начала и дату окончания (квалифицируемую дату) обучения и проверяете, если продолжительность меньше года, если да, то предупреждение, которое принимает во внимание сообщение, есть три входных элемента: первый
txtFromQualifDate
и второйtxtQualifDate
и третийtxtStudyYears
он покажет результат количества лет с дробью
источник
getFullYear
которое было предназначено для этого. ------- См. Библиотеку datejs в googlecode, которая, возможно, поддерживает большинство угловых случаевЕсли вы используете объекты Date, а затем используете
getTime()
функцию для обеих дат, она предоставит вам соответствующее время с 1 января 1970 года в числовом значении. Затем вы можете увидеть разницу между этими числами.Если это не поможет, ознакомьтесь с полной документацией: http://www.w3schools.com/jsref/jsref_obj_date.asp
источник
Код ниже вернет количество дней, оставшихся с сегодняшнего дня до даты фьючерса.
Зависимости: jQuery и MomentJs.
источник
источник
ЭТО ЧТО Я СДЕЛАЛ НА СВОЕЙ СИСТЕМЕ
источник