Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.03.2019, 09:06
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

if – else if – else
Есть строка

d = new Date(new Date()-X*24*60*60*1000);

где X это числом и может быть от 10 до 15, я понимаю что тут надо применить конструкцию if – else if – else, кто нибудь может объяснить на словах что сейчас нужно сделать, создать функцию? или массив? или переменную? или ещё что?

я попытался через операторы отобразить при каких условиях чему равно Х

if (10==>=new Date(1582,9,15)&&<=new Date(1700,02,11))
else if (11==>=new Date(1700,02,12)&&<=new Date(1800,02,12))
else if (12==>=new Date(1800,02,13)&&<=new Date(1900,02,13))
else if (13==>=new Date(1900,02,14)&&<=new Date(2100,02,14))
else if (14==>=new Date(2100,02,15)&&<=new Date(2200,02,15))
else (15==>=Date(2200,02,16)&&<=Date(2300,02,16))


просто на словах объясните что сейчас делать, что читать и что искать...
Ответить с цитированием
  #2 (permalink)  
Старый 05.03.2019, 09:35
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,740

Сообщение от Besprizornik
попытался через операторы отобразить при каких условиях чему равно Х
По-моему у вас не вышло, попробуйте словами.
Ответить с цитированием
  #3 (permalink)  
Старый 05.03.2019, 09:50
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

Х равно 10 если >=new Date(1582,9,15)&&<=new Date(1700,02,11))
Х равно 11 если >=new Date(1700,02,12)&&<=new Date(1800,02,12)
Х равно 12 если >=new Date(1800,02,13)&&<=new Date(1900,02,13)
Х равно 13 если >=new Date(1900,02,14)&&<=new Date(2100,02,14)
Х равно 14 если >=new Date(2100,02,15)&&<=new Date(2200,02,15)
Х равно 15 если >=Date(2200,02,16)&&<=Date(2300,02,16)
Ответить с цитированием
  #4 (permalink)  
Старый 05.03.2019, 10:04
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

<table border="1">
<tr><td>Кол-во дней</td><td>период чч.мм.гггг – чч.мм.гггг</td></tr><tr><td>10</td><td>15.10.1582 — 11.03.1700</td></tr>
<tr><td>11</td><td>12.03.1700 — 12.03.1800</td></tr>
<tr><td>12</td><td>13.03.1800 — 13.03.1900</td></tr>
<tr><td>13</td><td>14.03.1900 — 14.03.2100</td></tr>
<tr><td>14</td><td>15.03.2100 — 15.03.2200</td></tr><tr><td>15</td><td>16.03.2200 — 16.03.2300</td></tr></table>
Ответить с цитированием
  #5 (permalink)  
Старый 05.03.2019, 10:16
Аспирант
Отправить личное сообщение для NeoN Посмотреть профиль Найти все сообщения от NeoN
 
Регистрация: 01.03.2013
Сообщений: 77

возможно, вы хотели что-то вроде этого:

var x;
var someDate=new Date(1600,1,9); //произвольная дата
if (someDate>=new Date(1582,9,15)&&someDate<=new Date(1700,02,11)) x = 10;
else if (someDate>=new Date(1700,02,12)&&someDate<=new Date(1800,02,12)) x = 11;
else if (someDate>=new Date(1800,02,13)&&someDate<=new Date(1900,02,13)) x = 12;
else if (someDate>=new Date(1900,02,14)&&someDate<=new Date(2100,02,14)) x = 13;
else if (someDate>=new Date(2100,02,15)&&someDate<=new Date(2200,02,15)) x = 14;
else if (someDate>=new Date(2200,02,16)&&someDate<=new Date(2300,02,16)) x = 15;
Ответить с цитированием
  #6 (permalink)  
Старый 05.03.2019, 10:19
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,740

Я бы как-то так сделал:
(()=>{
    const currentTime=new Date().getTime();//текущее время (unix time)
    //Отсортированный список временных интервалов. 
    //Наименование свойства объекта - число, которое будет возвращено,
    //если текущее время попадает в заданный интервал.
    //Во вложенных массивах указываются аргументы, которые будут переданы конструктору Date
    const ranges={
        10:[[1582,9,15],[1700,02,11]],
        11:[[1700,02,12],[1800,02,12]]
    };
	
    //Поиск только тех интервалов, в которые входит текущее время
	return Object.keys(ranges).filter(day=>{
        //Приведение границ интервала к типу int
		const range=ranges[day].map(
			args=>new Date(...args).getTime()
		);
		
        //Сравнение текущего времени и границ интервала
		return (
			currentTime>=range[0] && currentTime<=range[1]
		);
	}).shift()||0;//Возвращение первого подходящего ключа, либо 0
})();

Последний раз редактировалось Nexus, 05.03.2019 в 13:44.
Ответить с цитированием
  #7 (permalink)  
Старый 05.03.2019, 10:31
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

а можно чуть подробнее?
я только пытаюсь учиться ...

хочу вставить в этот скрипт
<script> 
var d = new Date(); 
document.addEventListener('DOMContentLoaded', function() { 
document.querySelector('#day_gr').options[d.getDay()||7].selected = true;
document.querySelector('#date_gr').options[d.getDate()].selected = true;
document.querySelector('#month_gr').options[d.getMonth()+1].selected = true;
document.querySelector('#year_gr').value = d.getFullYear();
document.querySelector('#day_ul').options[d.getDay()||7].selected = true;
d = new Date(new Date()-13*24*60*60*1000);
document.querySelector('#date_ul').options[d.getDate()].selected = true;
document.querySelector('#month_ul').options[d.getMonth()+1].selected = true;
document.querySelector('#year_ul').value = d.getFullYear();
});
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 05.03.2019, 10:34
Кандидат Javascript-наук
Отправить личное сообщение для Besprizornik Посмотреть профиль Найти все сообщения от Besprizornik
 
Регистрация: 24.02.2019
Сообщений: 126

в 9 строчке что бы отнималось разное количество дней...
Ответить с цитированием
  #9 (permalink)  
Старый 05.03.2019, 10:41
Аспирант
Отправить личное сообщение для NeoN Посмотреть профиль Найти все сообщения от NeoN
 
Регистрация: 01.03.2013
Сообщений: 77

разное количество дней зависит от выбранного периода ведь?
тогда нужно еще откуда то брать время, по которому определить вычитаемое количество дней
Ответить с цитированием
  #10 (permalink)  
Старый 05.03.2019, 10:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,740

Besprizornik, обратите внимание на const, стрелочные функции и spread-оператор, они не поддерживаются старыми браузерами.

var x=(()=>{
    const currentTime=new Date().getTime();
    const ranges={
        10:[[1582,9,15],[1700,02,11]],
        11:[[1700,02,12],[1800,02,12]]
    };
	
	return Object.keys(ranges).filter(day=>{
		const range=ranges[day].map(
			args=>new Date(...args).getTime()
		);
		
		return (
			currentTime>=range[0] && currentTime<=range[1]
		);
	}).shift()||0;
})();

var d = new Date(); 
document.addEventListener('DOMContentLoaded', function() { 
	document.querySelector('#day_gr').options[d.getDay()||7].selected = true;
	document.querySelector('#date_gr').options[d.getDate()].selected = true;
	document.querySelector('#month_gr').options[d.getMonth()+1].selected = true;
	document.querySelector('#year_gr').value = d.getFullYear();
	document.querySelector('#day_ul').options[d.getDay()||7].selected = true;
	
	d = new Date(new Date()-x*24*60*60*1000);
	document.querySelector('#date_ul').options[d.getDate()].selected = true;
	document.querySelector('#month_ul').options[d.getMonth()+1].selected = true;
	document.querySelector('#year_ul').value = d.getFullYear();
});
Ответить с цитированием
Ответ



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

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