Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com date() e cia


h-abreu

Pergunta

Olá....

Estou com o scritp:

<style>
.calendario {
     width: 80%;
     border-collapse: collapse;
     border: 1px solid #333;
     background-color: #FBFBFB;
     text-align: center;
}

caption {
     padding: 5px 0 5px 0;
     font: small-caps bold 11px verdana, arial, tahoma;
     background-color: #999;
     border: 1px solid #333;
}

th {
     background: #F4F4F4;
}

th, td {
     padding: 3px;
}
</style>
<?php
     $domingo  = "style=color:#C30;";
     $hoje     = "style=color:#CC0;";

     $mes  = date("m");
     $dia  = date("d");
     $ano  = date("Y");
     $ano_ = substr($ano,-2);

     function meses($a)  {
              switch($a) {
                     case 1:  $mes = "janeiro";   break;
                     case 2:  $mes = "fevereiro"; break;
                     case 3:  $mes = "março";     break;
                     case 4:  $mes = "abril";     break;
                     case 5:  $mes = "maio";      break;
                     case 6:  $mes = "junho";     break;
                     case 7:  $mes = "julho";     break;
                     case 8:  $mes = "agosto";    break;
                     case 9:  $mes = "setembro";  break;
                     case 10: $mes = "outubro";   break;
                     case 11: $mes = "novembro";  break;
                     case 12: $mes = "dezembro";  break;
              }
              return $mes;
     }
?>
<table border="0" summary="Calendário" class="calendario">
     <caption><?php echo "".meses($mes)." ".$ano.""; ?></caption>
     <thead>
     <tr>
         <th abbr="Domingo" title="Domingo"><b <?php echo("$domingo");?>>D</b></th>
         <th abbr="Segunda" title="Segunda"><b>S</b></th>
         <th abbr="Terça"   title="Terça"><b>T</b></th>
         <th abbr="Quarta"  title="Quarta"><b>Q</b></th>
         <th abbr="Quinta"  title="Quinta"><b>Q</b></th>
         <th abbr="Sexta"   title="Sexta"><b>S</b></th>
         <th abbr="Sábado"  title="Sábado"><b>S</b></th>
     </tr>
     </thead>
     <tbody>
     <?php
          $Data = strtotime($mes."/".$dia."/".$ano_);
          $Dia  = date('w',strtotime(date('n/\1\/Y',$Data)));
          $Dias = date('t',$Data);
          for ($i=1,$d=1;$d<=$Dias;) {
               echo("<tr>");
               for ($x=1;$x<=7 && $d <= $Dias;$x++,$i++) {
                    if ($i > $Dia) {
            $destaque = '';
                        if ($x == 1)    { $destaque = $domingo; }
                        if ($d == $dia) { $destaque = $hoje; }
                        if (($x == 1) && ($d == $dia)) { $destaque = $hoje; }
                        echo("<td ".$destaque.">".$d++."</td>");
                    }
                    else { echo("<td> </td>"); }
               }
               for (;$x<=7;$x++) { echo("<td> </td>"); }
               echo("</tr>");
           }
     ?>
     </tbody>
</table>
Com algumas funções adicionadas além disso mas que não alteram esse código. Se eu escolher qualquer mês dentro do ano em que eu estou ou anos anteriores ele funciona, agora se eu colocar em qualquer mês a partir de janeiro de 2009 ele exibe o erro:
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\WM\www\XXXURLDOSCRIPT\calendario.php on line 70

Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in C:\WM\www\XXXURLDOSCRIPT\calendario.php on line 71
sendo as linhas 70 e 71 estas:
$Dia  = date('w',strtotime(date('n/\1\/Y',$Data)));
          $Dias = date('t',$Data);

Como resolver?

Obrigado!

Editado por h-abreu
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Mas a mensagem de erro diz outro coisa: Windows does not support dates prior to midnight (00:00:00), January 1, 1970 , ou seja, Windows não suporta datas anteriores à meia-noite de 1º de janeiro 1970...

Link para o comentário
Compartilhar em outros sites

  • 0

Agora eu fui olhar o código...

$Data = strtotime($mes."/".$dia."/".$ano_);

$Dia = date('w',strtotime(date('n/\1\/Y',$Data)));

Você está tentando converter para unix timestamp, só que o formato correto é ano-mes-dia e não mes/dia/ano... agora porque funcionou em algumas datas ai já não sei...

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, o formato americo é aaaa-mm-dd (que é o válido para gerar o timastampo) e não aaaa-mm/dd, logo o correto seria:

$Data = strtotime($ano_."-".$mes."-".$dia);

Se mesmo assim ainda não der certo comece a debugar, imprima as variáveis que compõe o ano, imprima o valor de $Data.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...