Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   if – else if – else (https://javascript.ru/forum/misc/76955-if-%E2%80%93-else-if-%E2%80%93-else.html)

Besprizornik 05.03.2019 09:06

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))


просто на словах объясните что сейчас делать, что читать и что искать...

Nexus 05.03.2019 09:35

Цитата:

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

По-моему у вас не вышло, попробуйте словами.

Besprizornik 05.03.2019 09:50

Х равно 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)

Besprizornik 05.03.2019 10:04

<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>

NeoN 05.03.2019 10:16

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

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;

Nexus 05.03.2019 10:19

Я бы как-то так сделал:
(()=>{
    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
})();

Besprizornik 05.03.2019 10:31

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

хочу вставить в этот скрипт
<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>

Besprizornik 05.03.2019 10:34

в 9 строчке что бы отнималось разное количество дней...

NeoN 05.03.2019 10:41

разное количество дней зависит от выбранного периода ведь?
тогда нужно еще откуда то брать время, по которому определить вычитаемое количество дней

Nexus 05.03.2019 10:48

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();
});


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