Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вычитание дат в Javascript (https://javascript.ru/forum/misc/52664-vychitanie-dat-v-javascript.html)

kover-samolet 29.12.2014 21:57

Вычитание дат в Javascript
 
Всем доброго времени суток!
Я новичок в Javascript, знаю самый минимум возможностей, а передо мной появилась такая задача:
Есть три тега списка select: День, Месяц, Год
Есть также три тега списка select для другой даты в том же формате.
Задача: вычесть одну дату из другой, т.е. получить разницу в днях (но не миллисекундах, часах и т.д.)

На данный момент получается почему-то, что даже если даты указаны одинаковые, возвращается большое значение в миллисекундах. И работает ли вычитание я понять пока не могу :(

Подскажите, пожалуйста, как реализовать такой функционал?
В интернете копался, откуда и почерпнул аналогию решения задачи, но принцип здесь по-видимому в нюансах работы с методом Date().

Подскажите, пожалуйста, как с использованием значений даты из формы провести вычитание дат и получить результат в виде количества дней?

Ниже представлю свой код, который есть на данный момент.

Всем заранее спасибо за участие и внимание!

function daysCalc() {
				var dayStart = parseInt(jQuery("#day").val(), 10);
				var monthStart = parseInt(jQuery("#month").val());
				var yearStart = parseInt(jQuery("#year").val());
				var dateStart = new Date(yearStart, monthStart, dayStart);

				var dayEnd = parseInt(jQuery("#day-end").val());
				var monthEnd = parseInt(jQuery("#month-end").val());
				var yearEnd = parseInt(jQuery("#year-end").val());
				var dateEnd = new Date(yearEnd, monthEnd, dayEnd);

				var subtract = (dateEnd - dayStart);
				alert(subtract);
			}

kover-samolet 29.12.2014 21:58

Искренне прошу прощения за дубликат темы.
Отключился интернет, авторизацию пришлось пройти заново и темы создались две.

melky 29.12.2014 22:14

пример вычисления количества дней до нового года:
var date1 = new Date();
var date2 = new Date("1/1/2015");

var diff = date2 - date1;

var milliseconds = diff;
var seconds = milliseconds / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;

alert(days);
alert(Math.ceil(days));

kover-samolet 29.12.2014 23:08

melky,
Спасибо большое!
Ваш вариант работает.
Но появился дополнительный вопрос:
Почему-то если выбирать дату начала например такую: 29.12.2014
и дату окончания 3.1.2015 результатом является число -26 (если не использовать предложенную Вами функцию
alert(Math.ceil(days));
)
А с использованием в результате получается 0.

Возможно, что это имеет значение, но параллельно с этим скриптом у меня работает скрипт автоматической подстановки текущей даты.
Если необходимо - могу отправить!

Спасибо большое за участие!

melky 29.12.2014 23:49

Цитата:

Сообщение от kover-samolet (Сообщение 348867)
melky,
Спасибо большое!
Ваш вариант работает.
Но появился дополнительный вопрос:
Почему-то если выбирать дату начала например такую: 29.12.2014
и дату окончания 3.1.2015 результатом является число -26 (если не использовать предложенную Вами функцию
alert(Math.ceil(days));
)
А с использованием в результате получается 0.

Возможно, что это имеет значение, но параллельно с этим скриптом у меня работает скрипт автоматической подстановки текущей даты.
Если необходимо - могу отправить!

Спасибо большое за участие!

угумс, может быть такое. это значит, местами перепутали две даты - из "новой" вычитаете "старую".

убрать такое поведение можно модулем на разнице двух дат:
// было
var diff = date2 - date1;
// стало
var diff = Math.abs(date2 - date1);

kover-samolet 30.12.2014 00:04

melky,
Спасибо огромное! Все заработало!

рони 30.12.2014 00:08

kover-samolet,
потому что в начале месяц потом день потом год
var date1 = new Date("12/29/2014");
var date2 = new Date("1/3/2015");

var diff = date2 - date1;

var milliseconds = diff;
var seconds = milliseconds / 1000;
var minutes = seconds / 60;
var hours = minutes / 60;
var days = hours / 24;

alert(days);
alert(Math.ceil(days));

Besprizornik 25.02.2019 09:37

нашёл скрипт
<script type="text/javascript"><!--
var d = new Date(); var month=new Array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");
document.write(d.getDate()+ " " + month[d.getMonth()]
+ " " + d.getFullYear()
); //
--></script>

как из текущей даты отнять день ,куда надо вставить - 24*60*60*1000

Nexus 25.02.2019 09:42

var d = new Date(
    new Date()-24*60*60
);

рони 25.02.2019 09:47

Цитата:

Сообщение от Nexus
.getMilliseconds()

:-? лишнее!!!


Часовой пояс GMT +3, время: 15:19.