2015-01-27 2 views
1

Я пытаюсь найти фактическое положение буднего дня в постоянное время. Я получаю это, работая с циклом, но пытаясь выяснить это с некоторой математикой. Я знаю, что это как разделить его на 7, но не заставить его работать.Как найти порядковое положение в любой день недели в JavaScript

Вот код.

for(var ind=0; ind<=between.length; ind++){ 
    if (new Date(between[ind]).getMonthWeek() === baseDtWk && new Date(between[ind]).getDay() === baseDtD) { 
     datesToBeMarked.push(between[ind]); 
     console.log(" :Date: " + between[ind] + " :Week: " + new Date(between[ind]).getMonthWeek()); 
     console.log("Date entered : " + new Date(between[ind])); 
    } 

} 
+0

Какова порядковая позиция буднего дня? Вы имеете в виду Sun = 0, Mon = 1 и т. Д.? – Barmar

+0

Пожалуйста, покажите код, который вы пробовали. – Barmar

+1

@Barmar 'for (var ind = 0; ind <= между.length; ind ++) { if (новая дата (между [ind]). GetMonthWeek() === baseDtWk && new Date (между [ind]). getDay() === baseDtD) { dateToBeMarked.push (между [ind]); console.log (": Дата:" + между [ind] + ": неделя:" + новая дата (между [ind]). GetMonthWeek()); console.log («Дата ввода:» + новая дата (между [ind])); } } ' – Superman

ответ

1

Я сделал это несколько дней назад. Это так же просто, как и код ниже. :)

On fiddle.

Number.prototype.nth= function(){ 
    var n= Math.round(this), t= Math.abs(n%100), i= t%10; 
    if(i<4 && (t<4 || t> 20)){ 
     switch(i){ 
      case 1:return n+'st'; 
      case 2:return n+'nd'; 
      case 3:return n+'rd'; 
     } 
    } 
    return n+'th'; 
} 
Date.prototype.nthofMonth= function(){ 
    var today= this.getDate(),m=this.getMonth(), 
    day= ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 
    'Friday', 'Saturday'][this.getDay()], 
    month= ['January', 'February', 'March', 'April', 'May', 'June', 
    'July', 'August', 'September', 'October', 'November', 'December'][m]; 
    return [(m+1)+'-'+today,'the ', Math.ceil(today/7).nth(), day, 'of', month, 'in', this.getFullYear()].join(' '); 
} 

var date=new Date().nthofMonth(); 
console.log(date); 
+0

'(Math.ceil ((today)/7)). Nth()' гораздо проще читать как 'Math.ceil (today/7) .nth()'. Создание массива только для форматирования выходной строки очень неэффективно. – RobG

0

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

// Add ordinal to a number 
function addOrdinal(n) { 
    var ord = [,'st','nd','rd']; 
    var a = n % 100; 
    return n + (ord[a>20? a%10 : a] || 'th'); 
} 

// Return the ordinal number of a day in the month 
function ordinalDay(d) { 
    d = d || new Date(); 
    var days = ['Sunday','Monday','Tuesday','Wednesday', 
       'Thursday', 'Friday','Saturday']; 
    return addOrdinal(Math.ceil(d.getDate()/7)) + ' ' + days[d.getDay()]; 
} 

console.log(ordinalDay(new Date(2015,0,1))); // 1st Thursday 
console.log(ordinalDay(new Date(2015,0,27))); // 4th Tuesday 
console.log(ordinalDay(new Date(2015,0,31))); // 5th Saturday 
console.log(ordinalDay(new Date(2015,11,25))); // 4th Friday 
+0

Если я немного перефразирую, чтобы объяснить свою первоначальную проблему, то могу сказать, что 'между []' - это массив, который содержит все даты, находящиеся между диапазоном, заданным пользователем. В первом элементе этого массива моя база, чтобы узнать тот же день недели. Например, если каким-то образом я не найду будний день на той же неделе, что и первый элемент, чем проблема. Как я могу найти его в моем массиве, первом появлении этого буднего дня? например, 3-й Мар является вторником на 1-й неделе. Но в первую неделю апреля нет вторника.Есть вторник во 2-й неделе апреля с датой 7. Как я могу туда добраться? – Superman

+0

Итак, основываясь на первой дате в диапазоне, вы хотите получить соответствующий n-й порядковый день недели за каждый месяц? Например. если первая дата - второй понедельник месяца, получите второй понедельник для каждого месяца в диапазоне? – RobG

+0

Да, основываясь на первом элементе массива. Тот же рабочий день на той же неделе. Если первый, чем первый. Если это третья, чем третья. Или, если он находится в первом, но в следующем месяце, в первую неделю недели нет дня, чем для первого появления этого буднего дня. И то же самое для последней недели n-го месяца. Если это не на прошлой неделе, чем на второй неделе. Я так злился на эту проблему. :( – Superman

Смежные вопросы