2017-02-06 2 views
0

Я пытаюсь загрузить дни рождения в fullcalendar.js. К моему неглубокой знаний, день рождения должен быть каждый год, и сказать, к примеру, у меня есть эти дни рождения, как это в моей колонке рождения базы данных (Примечание: я использовал формат, shortdateКак загрузить дни рождения на fullcalendar.js плагин в C# asp.net

  • 9/18/2016
  • 10/20/2016
  • 10/28/2016
  • 10/27/2016
  • 11/2/2016
  • 11/3/2016
  • 5/4/1992
  • 1/13/2017

вытягивать эти даты в мой календарь плагин, я буду видеть только показ рождения дата 1/13/2017, остальные не будет показывать, если я не идти в их конкретном году, например, 10/28/2016 покажет только то, что это 2016 год, 28 октября, и, конечно же, они должны показывать каждый год. Я должен уметь видеть эти даты в текущем году, но в соответствующие месяцы и дни месяца. Мои C# коды ниже

public object GetCalendarData() 
{ 
    var currentDate = DateTime.Now.Date; 
    var birthDays = from e in _userProfileRepository.Table.ToList() 
     where e.Birthday != null 
     group e by e.Birthday 
      into g 
     select new 
     { 
      Date = g.Key.Value, 
      Count = g.Count(), 
      UserProfileIds = g.Select(x => x.Id).ToList(), 
      Category = 1 
     }; 

    var subscriptions = from e in _estateRepository.Table.ToList() 
     where e.SubscriptionExpiryDate <= currentDate 
     group e by e.SubscriptionExpiryDate.Date 
      into g 
     select new 
     { 
      Date = g.Key, 
      Count = g.Count(), 
      UserProfileIds = g.Select(x => x.UserProfileId).ToList(), 
      Category = 2 
     }; 

    return birthDays.Union(subscriptions).ToList().Select(x=>new 
    { 
     x.Date, 
     x.Count, 
     x.Category, 
     x.UserProfileIds 
    }); 
} 

это мой календарь директива

function FullCalendar($window, $filter) { 
return { 
    restrict: "EAC", 
    link: link 
}; 
function link(scope, element, attrs) { 
    /* Initialize the calendar */ 
    scope.$watch('waiting', function (newValue) { 
     if (!newValue) { 
      var date = new Date(); 
      var d = date.getDate(); 
      var m = date.getMonth(); 
      var y = date.getFullYear(); 
      var form = ''; 
      var today = new Date($.now()); 
      var defaultEvents = scope.dashboardData.calendarData.map(function (item) { 
       return { 
         title: item.count+(item.category == 1 ? " birthday(s)" : "Expired Subscriptions")), 
         start: item.date, 
         category: item.category, 
         className: item.category == 1 ? 'bg-primary' : 'bg-warning', 
         userProfileIds: item.userProfileIds 
        }; 

       }; 
      }); 
      $(element).fullCalendar({ 
       defaultDate: $.now(), 
       slotDuration: '00:15:00', 
       minTime: '08:00:00', 
       maxTime: '19:00:00', 
       defaultView: 'month', 
       header: { 
        left: 'prev,next today', 
        center: 'title', 
        right: 'month,agendaWeek,agendaDay' 
       }, 
       events: defaultEvents, 
       editable: true, 
       // droppable: true, // this allows things to be dropped onto the calendar !!! 
       selectable: true, 
       eventClick: function (calEvent, jsEvent, view) { 
        switch (calEvent.category) { 
          case 1: 
           scope.openBirthdayListModal(calEvent.userProfileIds); 
           break; 
          case 2: 
           scope.openSubscriptionModal(calEvent.userProfileIds); 
           break; 
          default: 
         } 
       } 
      }); 
     } 
    }); 
} 
} 

FullCalendar.$inject = ["$window", "$filter"]; 

angular.module("app").directive("fullCalendar", FullCalendar); 
var dashboardData; 

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

ответ

0

Вы должны предоставить отдельный объект события за каждый год, на который вы хотите отобразить день рождения. FullCalendar не знает, что ваши данные относятся к дню рождения, он просто видит это событие в определенную дату. Он отображается только в те конкретные годы , потому что вы укажете ему конкретный год в данных события (как это требуется). Вы могли бы решить, сколько лет впереди и позади вас могут ожидать, что пользователи будут разумно смотреть в календаре, в зависимости от его шаблонов использования, и генерировать достаточно данных дня рождения для этого диапазона лет.

FullCalendar имеет ограниченную поддержку повторяющихся событий (где вы поставляете один объект события и сообщаете ему, чтобы повторять событие за определенный интервал), но, к сожалению, вы можете генерировать только ежедневные или еженедельные повторения в настоящий момент, поэтому он не будет работать для ежегодных мероприятий, таких как дни рождения.

Как в стороне, если ваша база данных хранит дни рождения (в отличие от даты рождения), то на самом деле не нужно хранить год, потому что день рождения не связан с конкретным годом. Однако, если у вас есть Дата рождения человека, было бы лучше сохранить это, тогда вы можете рассчитать как их будущие дни рождения, так и их возраст в любую конкретную дату, если вы потребуете этого в будущем.

Единственное, что я могу думать, чтобы решить повторяющуюся проблему рождения может выглядеть следующим образом:

1) Подайте переменная JavaScript в вашу страницу, которая содержит список всех дней рождения выражается как дни и месяцы (без лет).

2) Обрабатывать событие ViewRender FullCalendar - https://fullcalendar.io/docs/display/viewRender/. Каждый раз, когда изменяется вид или диапазон дат, проверяйте даты, отображаемые в списке дней рождения.Если какой-либо из дней рождения попадает в диапазон дня/месяца, отображаемый в настоящее время (независимо от года), используйте метод renderEvent - https://fullcalendar.io/docs/event_rendering/renderEvent/ - чтобы вставить новое событие в календарь для правильной комбинации день/месяц/год. (Возможно, вы захотите проверить, что в этот год еще нет события для этого дня рождения, например, если пользователь уже посетил это представление с момента календаря. Для этого вы могли бы добавить поле в свой JS-объект рождения который может содержать массив лет, для которых событие уже выполнено.)

+0

Wow, я люблю этого брата. Благодарю. Я попробую это –

+0

@IdowuMatthewDamilola, это здорово. Если вы обнаружите, что ответ помог вам, пожалуйста, помните о том, чтобы повышать и/или отмечать как принятый ответ - спасибо :-) – ADyson

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