Как изменить формат даты начала календаря с воскресенья на понедельник? - PullRequest
0 голосов
/ 25 июня 2018

Привет! Я пытаюсь выучить JavaScript из этого примера кода календаря автора xMark.Но его пример использует воскресенье как первый день недели.Я хочу, чтобы понедельник был первым днем ​​недели.Пока мне удалось изменить только заголовки заголовков, но не правильные позиции дат.https://codepen.io/xmark/pen/WQaXdv

Итак, я пытался понять, где в его коде я могу сместить даты на один шаг влево.Но я не могу понять, где в коде должен произойти этот сдвиг.

Раздел, в котором я в основном застрял, находится в Calendar.prototype.showMonth = function(y, m) {...}, где я думаю, что это та часть, которая требует изменения.В этой функции я не понимаю, почему автор var k = lastDay_of_LastMonth - firstDay_of_Month+1; добавляет +1 к последней переменной?

После var k = ... Я полностью потерян.Всякий раз, когда я пытаюсь что-то изменить, весь календарь просто разваливается.

@ Naguib

var d7 = new Date(2018, 6, 1);
d7
"Sun Jul 01 2018" 00:00:00 GMT+0200 (Central European Summer Time)
 
var firstDay_of_Month = new Date(2018, 6, 1).getDay();
firstDay_of_Month
0 // July 1st is on a Sunday.
 
//_________________________________________________________________
 
var d8 = new Date(2018, 7, 1);
d8
"Wed Aug 01 2018" 00:00:00 GMT+0200 (Central European Summer Time)
 
var firstDay_of_Month = new Date(2018, 7, 1).getDay();
firstDay_of_Month
3 // August 1st is on a Wednesday.
 
//_________________________________________________________________
 
var dNaguib = new Date(2018, 6, 7);
dNaguib
"Sat Jul 07 2018" 00:00:00 GMT+0200 (Central European Summer Time)
 
var dNaguib = new Date(2018, 6, 7).getDay();
dNaguib
6 // July 7th is on a Saturday.
 
 
// Why then does this dynamic code looking for the 7th each month
// make everything in the calendar work?
var firstDay_of_Month = new Date(y, m, 7).getDay(); // Naguib


// While the original code looking for the 1st each month make
// some months break the calendar?
var firstDay_of_Month = new Date(y, m, 1).getDay(); // Original

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Я просмотрел кодекс, который вы прикрепили, и прошел каждую часть кода, где упоминается воскресенье, и изменил его, чтобы он стал таким: https://codepen.io/naguibihab/pen/aKMYpB

Вот изменения, которые я сделал: https://github.com/naguibihab/js-goodies/commit/aa14d87eea68860650aee3383b458a0b00fb64a9

Я объясню, почему я делал каждое изменение, это возвращает меня в те дни, когда я учился в колледже, где я должен объяснить свой код, так что терпите меня:

1:

  this.DaysOfWeek = [
    'Mon',
    'Tue',
    'Wed',
    'Thu',
    'Fri',
    'Sat',
    'Sun'
  ];

Это заголовок строки заголовка в календаре, просто текст, логика там не меняется

2: firstDayOfMonth = 6 Ваш первый день месяца теперь понедельник, а не воскресенье, вы также можете написать , firstDayOfMonth = new Date(y, m, 7).getDay(), чтобы получить тот же результат, но я думаю, что первый делает его немного более понятным для читателя, так как мы всегда будем получать 6

3: if ( dow == 1 ) { начать новую строку в понедельник вместо воскресенья

4: if ( dow == 0 ) { закрыть строку в воскресенье вместо субботы

5: for(dow; dow < 7; dow++) { «не текущие» цифры следующего месяца могут доходить до воскресенья, поэтому нам нужна дополнительная итерация (возможно, есть лучший способ сделать это без увеличения итераций, но мне лень это вычислять сейчас)

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

Дайте мне знать в комментариях, если это не имеет достаточного смысла.

0 голосов
/ 25 июня 2018

Проверьте этот код от Nikhil Talreja. Это должно дать вам хорошее представление о том, как заставить календарь работать с понедельником в качестве даты начала. A , посмотрите аналогичный вопрос.

По сути, он использует некоторые для циклов и меток, например:

cal_days_labels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat','Sun'];

и

for (var j = 1; j <= 7; j++)

Проект похож на ваш, я думаю, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...