Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2013, 19:59
Аспирант
Отправить личное сообщение для Apollon Посмотреть профиль Найти все сообщения от Apollon
 
Регистрация: 01.11.2013
Сообщений: 42

Вывод даты. Какой способ лучше?
Всем привет.
Это мой второй вопрос на форуме и вторая неделя изучения JS, потому прошу не кидаться помидорами или еще чем-нибудь...
Сегодня решал следующую задачу:
Необходимо вывести на экран дату, которая будет через заданное пользователем количество дней. Количество дней, вводимое пользователем, не должно быть < 1 и > 1000, иначе вывести сообщение с ошибкой. Выведенная запись должна соответствовать образцу : "Через 20 дней будет Понедельник 25.11.2013 год". Слово "дней" должно склоняться при изменении количества введенных дней.
Решил ее способом, приведенным ниже. Однако, меня смущает количество используемых условий. Можно ли так делать? И есть ли другие способы решения?
Просьба укажите, какие методы вы использовали в решении задачи, чтобы мне было проще в них разобраться.
var day = prompt("Введите количество дней от 1 до 1000");
	function myDate (myDay) {
	var now = new Date();
	var from1970 = now.getTime();
	var res = new Date(1000*60*60*24*myDay + from1970);
	var myDays = ["Восскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"];
	var week = new Date(res);
	var dayX = res.getDate();
	var monthX = res.getMonth() + 1;
	var yearX = res.getFullYear();
	if(dayX < 10){
			var dayX = "0" + dayX;
		}
	if(monthX < 10){
		var monthX = "0" + monthX;
	}
	
	if (day < 1 || day > 1000  || isNaN(day)){
		document.write("Вы ввели не коректное число");

	}


	else if ((day[day.length - 2] == 1)  && (day[day.length - 1] ==  1)){
		document.write("Через " + day + " дней будет " + myDays[week.getDay()] + " " + dayX + "." + monthX + "." + yearX + " год");
	}

	else if (day[day.length - 1] == 1){
		document.write("Через " + day + " день будет " + myDays[week.getDay()] + " " + dayX + "." + monthX + "." + yearX + " год");
	}

	else if ((day[day.length - 2] == 1 && day[day.length - 1] == 1) || (day[day.length - 2] == 1 && day[day.length - 1] == 2) || (day[day.length - 2] == 1 && day[day.length - 1] == 3) || (day[day.length - 2] == 1 && day[day.length - 1] == 4)){
		document.write("Через " + day + " дней будет " + myDays[week.getDay()] + " " + dayX + "." + monthX + "." + yearX + " год");
	}


	else if (day[day.length - 1] == 2 || day[day.length - 1] == 3 || day[day.length - 1] == 4){
		document.write("Через " + day + " дня будет " + myDays[week.getDay()] + " " + dayX + "." + monthX + "." + yearX + " год");
	}


	else{
		document.write("Через " + day + " дней будет " + myDays[week.getDay()] + " " + dayX + "." + monthX + "." + yearX + " год");
	}
	}
	myDate(day);
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2013, 20:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Apollon,
функция склонения слов после цифры
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2013, 20:39
Аспирант
Отправить личное сообщение для Apollon Посмотреть профиль Найти все сообщения от Apollon
 
Регистрация: 01.11.2013
Сообщений: 42

Сообщение от рони Посмотреть сообщение
Apollon,
функция склонения слов после цифры
Спасибо! Попробую применить.
Ответить с цитированием
  #4 (permalink)  
Старый 06.11.2013, 00:19
Аспирант
Отправить личное сообщение для Apollon Посмотреть профиль Найти все сообщения от Apollon
 
Регистрация: 01.11.2013
Сообщений: 42

Если вы тоже новичок в программировании и вам интересно, что именно я нагородил в коде, то я расписал свои действия и вы можете с ними ознакомиться. Только следует учитывать, что даты выводимые объектом Date(), с учетом времени установленном на вашем ПК.
//Вывод окна с запросом для пользователя
var day = prompt("Введите количество дней от 1 до 1000");
	//создаем функцию
function myDate (myDay) {
	//Помещаем объект Date() в переменную
	var now = new Date();
	//Помещаем кол-во миллисек, прошедших с начала отсчета по сегодн число в переменную
	var from1970 = now.getTime();
	//Создаем переменную со значением равному кол-ву милесек в веденных пользователем количестве дней
	var userMyDay = 1000*60*60*24*myDay;
	//Создаем новый объект Date() для даты, равной текущей дате плюс кол-во дней выбранным пользователем
	//т.е. для той даты которая будет через кол-во дней выбранным пользователем от текущей даты (дата Х)
	var res = new Date(userMyDay + from1970);
	//Создаем массив для вывода дня недели в строковом варианте
	var myDays = ["Восскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"];
	//Помещаем объект Date() для даты Х в переменную week
	var week = new Date(res);
	//Узнаем методом getDay() число дня недели для даты Х. Это число соответсвует порядку расположения элементов в массиве myDays и, соответственно, берет из масива необходимый элемент
	var weekX = myDays[week.getDay()];
	//Узнаем методом getDate() число дня для даты Х
	var dayX = res.getDate();
	//Узнаем методом getMonth() число месяца для даты Х
	var monthX = res.getMonth() + 1;
	//Узнаем методом getFullYear() число года для даты Х
	var yearX = res.getFullYear();
	//подставляем нули для чисел < 10
	if(dayX < 10){
			var dayX = "0" + dayX;
		}
	if(monthX < 10){
		var monthX = "0" + monthX;
	}
	//Задаем услвие для ввода кол-ва дней
	if (day < 1 || day > 1000  || isNaN(day)){
		document.write("Вы ввели не коректное число");

	}

	//Тут я склонял слово "дней" (главное не путь порядок расстановки if / else). Завтра попробу сделать методом, который посоветовал ронни
	else if ((day[day.length - 2] == 1)  && (day[day.length - 1] ==  1)){
		document.write("Через " + day + " дней будет " + weekX + " " + dayX + "." + monthX + "." + yearX + " год");
	}

	else if (day[day.length - 1] == 1){
		document.write("Через " + day + " день будет " + weekX + " " + dayX + "." + monthX + "." + yearX + " год");
	}

	else if ((day[day.length - 2] == 1 && day[day.length - 1] == 1) || (day[day.length - 2] == 1 && day[day.length - 1] == 2) || (day[day.length - 2] == 1 && day[day.length - 1] == 3) || (day[day.length - 2] == 1 && day[day.length - 1] == 4)){
		document.write("Через " + day + " дней будет " + weekX + " " + dayX + "." + monthX + "." + yearX + " год");
	}


	else if (day[day.length - 1] == 2 || day[day.length - 1] == 3 || day[day.length - 1] == 4){
		document.write("Через " + day + " дня будет " + weekX + " " + dayX + "." + monthX + "." + yearX + " год");
	}


	else{
		document.write("Через " + day + " дней будет " + weekX + " " + dayX + "." + monthX + "." + yearX + " год");
	}
	}
	//Вызываем функцию с подстановкой дней, набранных пользователем
	myDate(day);
Ответить с цитированием
  #5 (permalink)  
Старый 06.11.2013, 00:33
Аспирант
Отправить личное сообщение для Apollon Посмотреть профиль Найти все сообщения от Apollon
 
Регистрация: 01.11.2013
Сообщений: 42

Да еще 17 строка лишняя. Можно было просто написать
var weekX = myDays[res.getDay()];
Ответить с цитированием
  #6 (permalink)  
Старый 06.11.2013, 01:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Apollon, до первой звезды не смотреть )))
var plural = function (b) {
    return function (a) {
        return b[1 == a % 10 && 11 != a % 100 ? 0 : 2 <= a % 10 && 4 >= a % 10 && (10 > a % 100 || 20 <= a % 100) ? 1 : 2]
    }
    };
    var d = plural([' день',' дня',' дней'])

	function myDate() {
    var day = +prompt("Введите количество дней от 1 до 1000", 1)||1;
    day %= 1000;
    var now = new Date();
    now.setDate(now.getDate()+day);
    var myDays = ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"];
    alert([(new Date()).toLocaleDateString(), day+d(day), myDays[now.getDay()], now.toLocaleDateString()].join('\n'))
    }

    myDate ()

Последний раз редактировалось рони, 03.05.2016 в 00:23.
Ответить с цитированием
  #7 (permalink)  
Старый 06.11.2013, 11:20
Аспирант
Отправить личное сообщение для Apollon Посмотреть профиль Найти все сообщения от Apollon
 
Регистрация: 01.11.2013
Сообщений: 42

Ничего научусь. Главное практика!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
Какой язык лучше выбрать для написания скрипта? D534364 Общие вопросы Javascript 4 31.07.2012 22:02
Какой хостинг лучше взять Hetengected Оффтопик 12 18.11.2010 14:30
Подскажите какой DOCTYPE лучше использовать? greatilya (X)HTML/CSS 8 11.01.2010 22:14
Какой способ задания значения переменной в javascript коде корректен user_robot Общие вопросы Javascript 3 08.12.2009 17:25