fullcalendar carregando o mês de janeiro sempre no ano posterior Boa tarde. Estou utilizando o fullcalendar e o mesmo está me acarretando um problema em relação ao mês de janeiro. Lanço uma data em 10 01 2018, grava corretamente no banco, mas o mesmo só está carregando em 2019. Fiz também um lançamento em janeiro de 2019 e o mesmo só me aparece em janeiro de 2020. Os meses subsequentes e anteriores estão carregando corretamente. Não sei se o probl...
AF
fullcalendar carregando o mês de janeiro sempre no ano posterior  
Boa tarde.
Estou utilizando o fullcalendar e o mesmo está me acarretando um problema em relação ao mês de janeiro.
Lanço uma data em 10 01 2018, grava corretamente no banco, mas o mesmo só está carregando em 2019. Fiz também um lançamento em janeiro de 2019 e o mesmo só me aparece em janeiro de 2020. Os meses subsequentes e anteriores estão carregando corretamente. Não sei se o problema é em relação ao mês corrente, pois só percebi esse problema agora.
Estou desconfiando da função $script->add, fiz alguns testes e é ali que acarreta o problema, mas não consegui identificar uma possível solução.

$script->add("
{
id: ".$event->id.",
title: '".$event->title."',
start: new Date(".date('Y', strtotime($event->event_date)).", ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", ".date('d', strtotime($event->event_date)).", ".str_replace(':',',',$event->start_hour)."),
end: new Date(".date('Y', strtotime($event->event_date)).", ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", ".date('d', strtotime($event->event_date)).", ".($event->start_hour + $event->duration)."),
backgroundColor: '".$event->color."',
borderColor: '".$event->color."',
url: "index.php?class=EventForm&method=onEdit&key=".$event->id."&event_date=".date('d', strtotime($event->event_date))."&start_hour=".$event->start_hour."",
status: false
},
");

Vou postar o código do AgendaView.class.php.

Agradeço qualquer ajuda.

Atenciosamente,
Ailton Furtado

 
  1. <?php
  2. class AgendaView extends TPage
  3. {
  4. function __construct()
  5. {
  6. parent::__construct();
  7. $this->form = new TQuickForm('form_agenda');
  8. $this->form->setFormTitle('Agenda - Sistema Financeiro - Casa de Jorge');
  9. $this->form->class = 'tform';
  10. $this->form->style = 'width: 800px';
  11. $table = new TTable;
  12. $calendar = new TElement('div');
  13. $calendar->id = 'calendar';
  14. $table->addRow()->addCell($calendar);
  15. try
  16. {
  17. TTransaction::open('jorge');
  18. $repository = new TRepository('Event');
  19. $events = $repository->load();
  20. $script =new TElement('script');
  21. $script->type = 'text/javascript';
  22. $script->add("
  23. $(document).ready(function() {
  24. $('#calendar').fullCalendar({
  25. timezone: 'America/Sao_Paulo',
  26. header: {
  27. left: 'prev,next today',
  28. center: 'title',
  29. right: 'month,agendaWeek,agendaDay'
  30. },
  31. events: [
  32. ");
  33. foreach($events as $event)
  34. {
  35. $script->add("
  36. {
  37. id: ".$event->id.",
  38. title: '".$event->title."',
  39. start: new Date(".date('Y', strtotime($event->event_date)).", ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", ".date('d', strtotime($event->event_date)).", ".str_replace(':',',',$event->start_hour)."),
  40. end: new Date(".date('Y', strtotime($event->event_date)).", ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", ".date('d', strtotime($event->event_date)).", ".($event->start_hour + $event->duration)."),
  41. backgroundColor: '".$event->color."',
  42. borderColor: '".$event->color."',
  43. url: \"index.php?class=EventForm&method=onEdit&key=".$event->id."&event_date=".date('d', strtotime($event->event_date))."&start_hour=".$event->start_hour."\",
  44. status: false
  45. },
  46. ");
  47. }
  48. $script->add("
  49. ],
  50. eventRender: function(event, eventElement)
  51. {
  52. if(event.status == true)
  53. {
  54. eventElement.find('div.fc-content').prepend(\"<i class='fa fa-check'></i> \");
  55. }
  56. else
  57. {
  58. eventElement.find('div.fc-content').prepend(\"<i class='fa fa-clock-o'></i> \");
  59. }
  60. },
  61. dayClick: function(date, jsEvent, view) {
  62. if (view.name === 'month') {
  63. $('#calendar').fullCalendar('gotoDate', date);
  64. $('#calendar').fullCalendar('changeView', 'agendaDay');
  65. $('.fc-event-container').children('a').attr('generator', 'adianti');
  66. $('.fc-widget-content').mouseover(function(){
  67. $(this).css('cursor','pointer');
  68. });
  69. }
  70. else if(view.name === 'agendaDay' || view.name === 'agendaWeek')
  71. {
  72. $(this).append('<a></a>');
  73. $(this).children('a').attr('generator', 'adianti');
  74. var href = $(this).children('a').attr('href', 'index.php?class=EventForm&method=onStartEdit&event_date='+date.format('DD/MM/YYYY')+'&start_hour='+date.format('hh:mm'));
  75. $(this).children('a').click();
  76. }
  77. },
  78. });
  79. $('.fc-content').click(function(){
  80. $(this).parent('a').attr('generator', 'adianti');
  81. });
  82. $('.fc-widget-content').mouseover(function(){
  83. $(this).css('cursor','pointer');
  84. });
  85. $('body').on('click', ':button.fc-button', function(event){
  86. event.preventDefault();
  87. $('.fc-content').parent('a').attr('generator', 'adianti');
  88. $('.fc-widget-content').mouseover(function(){
  89. $(this).css('cursor','pointer');
  90. });
  91. });
  92. $(':button.fc-today-button').click(function(){
  93. $('.fc-content').parent('a').attr('generator', 'adianti');
  94. $('.fc-widget-content').mouseover(function(){
  95. $(this).css('cursor','pointer');
  96. });
  97. });
  98. });
  99. ");
  100. print_r($script);
  101. $table->addRow()->addCell($script);
  102. TTransaction::close();
  103. }
  104. catch (Exception $e)
  105. {
  106. new TMessage('error', $e->getMessage());
  107. }
  108. $vbox = new TVBox;
  109. //$vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  110. $vbox->add($this->form);
  111. $vbox->add($table);
  112. parent::add($vbox);
  113. }
  114. public function onDelete( $param )
  115. {
  116. $action = new TAction(array($this, 'Delete'));
  117. $action->setParameters($param);
  118. new TQuestion('Dejesa relamente deletar o registro?', $action);
  119. }
  120. public function Delete( $param )
  121. {
  122. try
  123. {
  124. if (isset($param['id']))
  125. {
  126. $key=$param['id'];
  127. TTransaction::open('jorge');
  128. $object = new Event($key);
  129. $object->delete();
  130. TTransaction::close();
  131. $posAction = new TAction(array('AgendaView', 'reload'));
  132. new TMessage('info', 'Registro deletado', $posAction);
  133. }
  134. }
  135. catch (Exception $e)
  136. {
  137. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  138. TTransaction::rollback();
  139. }
  140. }
  141. public function reload()
  142. {
  143. }
  144. }
  145. ?>


Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


AG

Olá Ailton, boa noite.

Algumas questões para ver se consigo ajudar:

Por que razão está a usar "-1 months" ? Sabe que há alguns problemas com essa função (-1 e +1), quando os meses antes ou depois não têm o mesmo número de dias ( php.net/manual/en/function.strtotime.php#111989 )

Pode mostrar o var_dump dos valores de "start" e "end" na função $script->add ?

Já agora o var_dump dos valores de $event->event_date e $event->start_hour ?

Sem esses valores não posso testar aqui.

Obrigado

Abel Gomes
AF

Boa tarde Abel.
Em primeiro lugar agradeço sua atenção.

O caso é aqui ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", o php está transformando 01 (janeiro) em 12 (dezembro) ao invés de 00 (janeiro em javascript) e o javascript aceita de 0 a 11 para meses.

Estou vendo aqui como acertar isso.

Se tiver alguma dica, agradeço.

Atenciosamente,

Ailton Furtado
AF

Boa tarde Abel.

Consegui resolver o problema.

Mais uma vez agradeço sua atenção.

Ailton Furtado
AG

Boa tarde Ailton.

Ainda bem que conseguiu encontrar a solução. Peço desculpa por não ter respondido, mas também eu andava à procura de uma solução para um problema meu que só esta madrugada encontrei... :-)

Já agora, se puder, coloque aqui a sua solução para ajudar outros que possam vir a debater-se com o mesmo problema.

Um abraço!

Abel
AF

Bom dia Abel.
Compartilho a solução que pensei. Caso alguém tenha uma melhor é sempre bem vinda.

Como lhe disse anteriormente, o problema era esse:

O caso é aqui ".date('m', strtotime('-1 months',strtotime($event->event_date)) ).", o php está transformando 01 (janeiro) em 12 (dezembro) ao invés de 00 (janeiro em javascript) e o javascript aceita de 0 a 11 para meses.

Então peguei essa parte e atribuí a uma variável php $mes e fiz uma lógica quando o $mes fosse igual a 12, queria dizer que ele valeria 00. Para o javascript, o mês de janeiro, e o substituí na fórmula do javascript descrita abaixo.

Assim não precisei fazer grande alterações no código original do javascript.

----------------------------------------------------------------------------------------------------------

$mes = date('m', strtotime('-1 months',strtotime($event->event_date)) );

if ($mes == '12')
$mes = '00';

$script->add("
{
id: ".$event->id.",
title: '".$event->title."',
start: new Date(".date('Y', strtotime($event->event_date)).", ".$mes.", ".date('d', strtotime($event->event_date)).", ".str_replace(':',',',$event->start_hour)."),
end: new Date(".date('Y', strtotime($event->event_date)).", ".$mes.", ".date('d', strtotime($event->event_date)).", ".($event->start_hour + $event->duration)."),
backgroundColor: '".$event->color."',
borderColor: '".$event->color."',
url: "index.php?class=EventForm&method=onEdit&key=".$event->id."&event_date=".date('d', strtotime($event->event_date))."&start_hour=".$event->start_hour."",
status: false
},
");