Javascript.RU

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

Как получить ближайший выходной день?
Добрый день!
Занимаюсь созданием кнопок, по нажатию на которые выставляется дата. Сделал кнопки "Завтрашний день" и "Через неделю". Вот такой код:
months = [
	[31,'Январь','января'],
	[28,'Февраль','февраля'],
	[31,'Март','марта'],
	[30,'Апрель','апреля'],
	[31,'Май','мая'],
	[30,'Июнь','июня'],
	[31,'Июль','Июля'],
	[31,'Август','августа'],
	[30,'Сентябрь','сентября'],
	[31,'Октябрь','октября'],
	[30,'Ноябрь','ноября'],
	[31,'Декабрь','декабря']
];

weekDays = [
	['воскресенье','вс'],
	['понедельник','пн'],
	['вторник','вт'],
	['среда','ср'],
	['четверг','чт'],
	['пятница','пт'],
	['суббота','сб']
];
...
    function echo_date( date ){
        echo_date = function(date){
            date = new Date( date );
            return {
            "date" : date,
            "month" : months[ date.getMonth() ][2],
            "day" : weekDays[ date.getDay() ][0],
            "year" : date.getFullYear(),
            "day_num" : date.getDate(),
            "full_date" : date.getDate()+'.'+(date.getMonth() + 1)+'.'+date.getFullYear()
        };
    }
    return echo_date(date);
...
    //завтра
    $(document).on('click', '#tomorrowCal', function(){
            var dates = echo_date( Date.now()+24*60*60*1000 );
            $('#avia-tab #when').val(dates.day_num+" "+dates.month+" "+dates.year+" ("+dates.day+")");
            sr.dateTo = dates.full_date;
    });

    //через неделю
    $(document).on('click', '#avia-tab .when-back .example', function(){
        var dates = echo_date( Date.now()+7*(24*60*60*1000) );
        $('#avia-tab #when-back').val(dates.day_num+" "+dates.month+" "+dates.year+" ("+dates.day+")");
        sr.dateBack = dates.full_date;
    });


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

Спасибо всем, кто подскажет!
Ответить с цитированием
  #2 (permalink)  
Старый 27.05.2015, 19:33
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Вроде бы объект Date все это сам умеет делать.

Между тем решение давно существует. Вы просто пишите нормальным текстом чего хотите, программа его распознает и все считает. Вам остается только вписать в валуе кнопок тот самый текст. Например на пхп вот такая функция есть http://php.net/manual/en/function.strtotime.php - но для русского языка ее надо отдельно локализовать. То есть вам надо такую же на js.

Последний раз редактировалось kostyanet, 27.05.2015 в 19:37.
Ответить с цитированием
  #3 (permalink)  
Старый 27.05.2015, 19:43
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Не разбирался что тут к чему, но похоже на отстой, и тем не менее: https://code.google.com/p/datejs/

Для меня эти даты полная идиосинкразия. Придется вот так на js вычислять когда там следующий выходной или какое число будет "через 3 дня", я лучше аяксом на сервер буду ходить спрашивать strtotime чем мудохаться со всеми этими кусочками дней, дат и времени.
Ответить с цитированием
  #4 (permalink)  
Старый 27.05.2015, 19:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

diakon,
<script>
var data = new Date();
data.setDate(data.getDate()+1)
document.write('завтра : ' + data.toLocaleDateString() + "<br>")
data = new Date();
data.setDate(data.getDate()+7)
document.write('через неделю : ' + data.toLocaleDateString() + "<br>")
data = new Date();
data.setDate(data.getDate()+6 - data.getDay())
document.write('ближайшая суббота : ' + data.toLocaleDateString() + "<br>")
data = new Date();
data.setDate(data.getDate()+7 - data.getDay())
document.write('ближайшее воскресенье : ' + data.toLocaleDateString() + "<br>")
data = new Date();
data.setMonth(data.getMonth()+1,0)
document.write('всего дней в этом месяце : ' + data.getDate() + "<br>")
</script>
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2015, 05:25
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Это скучно прибавлять и вычитать. А вот например для срока жизни куков той или иной роли юзера у меня обычное текстовое поле, куда я пишу, скажем для админской роли +3 hours, а для ритейла 1 year, а для опера +30 days иниипет.

А иначе как? datatime-local заводить и в модель дописывать смещение? В общем все эти калькуляции собираются в объект и индексируются обычными словами завтра, послезавтра, через неделю, в следующий выходной и тп. Нарисуйте.

Последний раз редактировалось kostyanet, 28.05.2015 в 05:30.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить свойсвто объекта? Armen Общие вопросы Javascript 4 19.10.2014 06:45
Как получить значение цвета из color picker razorg1991 jQuery 1 06.10.2014 09:06
Как получить в JQUERY каждую строку как отдельный объект? Alex1233 Общие вопросы Javascript 3 22.08.2014 06:54
Как получить значение переменной из игры на HTML5? Dimaz Общие вопросы Javascript 6 10.08.2014 16:27
Как получить указатель на элемент вызвавший функцию pelayo Общие вопросы Javascript 9 29.06.2010 23:32