Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.12.2014, 21:57
Новичок на форуме
Отправить личное сообщение для kover-samolet Посмотреть профиль Найти все сообщения от kover-samolet
 
Регистрация: 29.12.2014
Сообщений: 5

Вычитание дат в 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);
			}
Ответить с цитированием
  #2 (permalink)  
Старый 29.12.2014, 21:58
Новичок на форуме
Отправить личное сообщение для kover-samolet Посмотреть профиль Найти все сообщения от kover-samolet
 
Регистрация: 29.12.2014
Сообщений: 5

Искренне прошу прощения за дубликат темы.
Отключился интернет, авторизацию пришлось пройти заново и темы создались две.
Ответить с цитированием
  #3 (permalink)  
Старый 29.12.2014, 22:14
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

пример вычисления количества дней до нового года:
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));
Ответить с цитированием
  #4 (permalink)  
Старый 29.12.2014, 23:08
Новичок на форуме
Отправить личное сообщение для kover-samolet Посмотреть профиль Найти все сообщения от kover-samolet
 
Регистрация: 29.12.2014
Сообщений: 5

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

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

Спасибо большое за участие!
Ответить с цитированием
  #5 (permalink)  
Старый 29.12.2014, 23:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

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

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

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

убрать такое поведение можно модулем на разнице двух дат:
// было
var diff = date2 - date1;
// стало
var diff = Math.abs(date2 - date1);
Ответить с цитированием
  #6 (permalink)  
Старый 30.12.2014, 00:04
Новичок на форуме
Отправить личное сообщение для kover-samolet Посмотреть профиль Найти все сообщения от kover-samolet
 
Регистрация: 29.12.2014
Сообщений: 5

melky,
Спасибо огромное! Все заработало!
Ответить с цитированием
  #7 (permalink)  
Старый 30.12.2014, 00:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

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));
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2019, 09:37
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

нашёл скрипт
<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
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2019, 09:42
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,799

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

Последний раз редактировалось Nexus, 25.02.2019 в 09:56.
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2019, 09:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,133

Сообщение от Nexus
.getMilliseconds()
лишнее!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34