Foros del Web » Programando para Internet » ASP Clásico »

Calendario: que empiece por lunes en vez de domingo.

Estas en el tema de Calendario: que empiece por lunes en vez de domingo. en el foro de ASP Clásico en Foros del Web. Hola a todos. Estoy haciendo pruebas con un código de un calendario que he encontrado. Está en formato anglosajón, o sea, que la semana empieza ...
  #1 (permalink)  
Antiguo 24/03/2010, 06:33
 
Fecha de Ingreso: febrero-2004
Mensajes: 85
Antigüedad: 20 años, 10 meses
Puntos: 0
Calendario: que empiece por lunes en vez de domingo.

Hola a todos.

Estoy haciendo pruebas con un código de un calendario que he encontrado. Está en formato anglosajón, o sea, que la semana empieza por domingo en vez de por lunes. No soy capaz de hacer que empieze por lunes y que los días del mes aparezcan correctamente sin estar adelantados o tratrasados una posición.

Os Pongo el código a ver si me podeis ayudar.

Muchas gracias.


Cita:
<%

TableWidth = 500
BgColor = "#3399CC"
CellColor = "#FFFFFF"

dbName = "ofer_nov_even.mdb"
Conn= "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Server.MapPath(dbName)

ViewDayImage = "imagenes/calendario_evento.gif"


Session.LCID = 2058
%>




<%
'***** FUNCTIONS *********

Sub DisplayCalendar(mMonth, yYear)

dDay = DateSerial(yYear,mMonth,1)
mMonth = Month(dDay)
yYear = Year(dDay)
FirstDayOfMonth = Weekday(dDay)

'## Display the Top of Calendar ##
CALL DisplayCalendarTop(dDay)

'## Start Displaying the Actual Calendar ##
Response.Write "<Table Align=center width=" & TableWidth & " CellPadding=3 CellSpacing=1 Border=1 BgColor=" & BgColor & ">" & vbCrlf
Response.Write "<TR Valign=Top Align=Center BgColor=" & bgcolor & ">" & vbCrlf
For i = vbSunday To vbSaturday
Response.Write "<TD><Font Size='-2'><b>" & left(WeekDayName(i), 3) & "</b></Font></TD>" & vbCrlf
Next
Response.Write "</TR>" & vbCrlf

'## Set dDay to the First day of the month ##
dDay = DateSerial(yYear,mMonth,1)

FOR j=1 to 5

Response.Write "<TR>" & vbCrlf

FOR i=vbSunday to vbSaturday
CellStr="<Font size=-3>&nbsp;</Font>"
Color=cellcolor

If WeekDay(dDay) = i and Month(dDay) = mMonth then

'## Set Color to Yellow if Current Day
if (Day(dDay) = Day(now)) and (Month(dDay) = Month(now)) and (Year(dDay) = Year(now)) then Color="Yellow"

'Mostrmoas los días del mes.
CellStr = "<Font size=-2>" & Day(dDay) & "</Font>"

'## Get the Memo Field out of Database for current Date
evento = GetCellData(dDay)
IF evento <> "" then
'## Format Cell String if there is a Memo ##
CellStr ="<Font size=-2>" & Day(dDay) & "</Font>" & "<a href=eventos_info.asp?fecha=" & dDay & " target=eventos_info><img alt='Ver evento.' border=0 src=" & ViewDayImage & "></a>"

'## Save Calendar Details to Print After the Calendar is Displayed ##
Details = Details & "<Table Align=center width=" & TableWidth & " cellspacing=2 cellpadding=3 border=0>" & vbCrlf
Details = Details & "<TR>" & vbCrlf
Details = Details & " <TD width=" & TableWidth-10 & " bgcolor='" & Bgcolor & "'>" & vbCrlf
Details = Details & " <a name='" & dDay & "'><Font Size=-1>" & (WeekDayName(weekday(dDay))) & " " & (MonthName(Month(dDay))) & " " & Day(dDay) & " , " & Year(dDay) & "</Font>" & vbCrlf
Details = Details & " </TD>" & vbCrlf
Details = Details & "</TR>" & vbCrlf
Details = Details & "</Table>" & vbCrlf
Details = Details & "<Table Align=center width=" & TableWidth & " cellspacing=2 cellpadding=3 border=0>" & vbCrlf
Details = Details & "<TR>" & vbCrlf
Details = Details & " <TD bgcolor='" & color & "'>" & vbCrlf
Details = Details & " <PRE><Font Face=arial>" & evento & "</Font></PRE>" & vbCrlf
Details = Details & " </TD>" & vbCrlf
Details = Details & "</TR>" & vbCrlf
Details = Details & "</Table>" & vbCrlf
'## End Calendar Details ##
End If

'## Get the Next Day
dDay = DateAdd("d",1,dDay)

End If

Response.Write "<TD vAlign=top align=left BgColor='" & Color & "'>" & CellStr & "</TD>" & vbCrlf
NEXT '## FOR i=vbSunday to vbSaturday ##

Response.Write "</TR>" & vbCrlf

NEXT '## For j=1 to 6 ##

Response.Write "</Table>" & vbCrlf

'## Display the Months at the bottom of the calendar ##

'## Display the Calendar Details ##
Response.write "<BR>" & Details & "<BR><BR>"

For i=1 to 50
Response.write "<BR>"
Next

End Sub
'************************************************
Sub DisplayCalendarTop(dDay)
Title = MonthName(month(dDay)) & " " & year(dDay)
pPREVIOUS = dateadd("m",-1, dDay)
nNEXT = dateadd("m",1,dDay)

Response.Write "<a name=top><TABLE Align=center CELLPADDING=0 CELLSPACING=0 WIDTH=" & TableWidth & " BORDER=1>" & vbCrlf
Response.Write "<TR VALIGN=MIDDLE ALIGN=CENTER>" & vbCrlf
Response.Write "<TD BgColor='" & BgColor & "' ALIGN=center>" & vbCrlf
Response.Write "<a href='" & request.servervariables("SCRIPT_NAME") & "?month=" & month(pPREVIOUS) & "&year=" & year(pPREVIOUS) & "'1><img src=""imagenes/eventos_ant.png"" width=12 height=11 border=0></a>" & vbCrlf
Response.Write "</TD>" & vbCrlf
Response.Write "<TD BgColor='" & BgColor & "' ALIGN=center>" & vbCrlf
Response.Write "<B><small>" & Title & "</small></B>" & vbCrlf
Response.Write "</TD>" & vbCrlf
Response.Write "<TD BgColor='" & BgColor & "' ALIGN=center>" & vbCrlf
Response.Write "<a href='" & request.servervariables("SCRIPT_NAME") & "?month=" & month(nNEXT) & "&year=" & year(nNEXT) & "'><img src=""imagenes/eventos_sig.png"" width=12 height=11 border=0></a>" & vbCrlf
Response.Write "</TD>" & vbCrlf
Response.Write "</TR>" & vbCrlf
Response.Write "</TABLE>" & vbCrlf
End Sub
'************************************************
Function GetCellData(dDay)
Set rs = Server.CreateObject("ADODB.Recordset")
sSQL = "SELECT * FROM eventos WHERE Date=#" & dDay & "#"
rs.open sSQL, Conn,3,3
GetCellData = ""
if rs.recordcount > 0 then GetCellData=rs("evento")
rs.close
Set rs = nothing
End Function
'************************************************
%>
  #2 (permalink)  
Antiguo 24/03/2010, 07:18
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 18 años
Puntos: 126
Respuesta: Calendario: que empiece por lunes en vez de domingo.

Hola

Hace poco acabe de montar este

Código ASP:
Ver original
  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
  2. <% Option Explicit %>
  3. <%
  4. Dim oConn, SQL, rs, registros, j
  5. Dim Fecha
  6. Fecha = 0
  7. 'conexion
  8. ' ==== campos ===
  9. 'Fecha = 23/04/2010, 24/05/2010, .....
  10. 'AnyoMes = 20104, 20105, ....
  11. ' ============
  12.  
  13. SQL ="SELECT Fecha, AnyoMes FROM Calendario WHERE AnyoMes >= "&CInt(Year(Date)) & CInt(Month(Date))&""
  14. set rs = oConn.Execute(SQL)
  15. registros = rs.getrows()
  16. rs.Close
  17. Set rs = Nothing
  18. oConn.Close
  19. Set oConn = Nothing
  20.  
  21. Dim arreglo()
  22. Redim arreglo(UBound(registros,2))
  23. For j = 0 to UBound(registros,2)
  24. arreglo(j) = registros(Fecha,j)
  25. Next 'j
  26. %>
  27. <html>
  28. <head>
  29. <title>Horarios</title>
  30. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  31. <style type="text/css">
  32. .calFondoCalendario {background-color:#EEEEEE;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  33. #calFondoMes {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px;font-weight:bold;text-align:center;}
  34. .calFondoDias, .calFondoSemanas, .calFondoNumeroSemanas {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900; }
  35. #calDias, #calFinSemana {font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;}
  36. #calDias a:link, #calDias a:visited {color:#333333;text-decoration:none;}
  37. #calDias a:hover, #calDias a:active {color:#333333;text-decoration:none;}
  38. #calDiasMarcado, #calFinSemanaMarcado {background-color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;}
  39. #calDiasMarcado a:link, #calDiasMarcado a:visited {color:#FFFFFF;text-decoration:none;}
  40. #calDiasMarcado a:hover, #calDiasMarcado a:active {color:#FFFFFF;text-decoration:none;}
  41. #calFinSemanaMarcado a:link, #calFinSemanaMarcado a:visited {color:#FF0000;text-decoration:none;}
  42. #calFinSemanaMarcado a:hover, #calFinSemanaMarcado a:active {color:#FF0000;text-decoration:none;}
  43. #calFinSemana a:link, #calFinSemana a:visited {color:#FF0000;text-decoration:none;}
  44. #calFinSemana a:hover, #calFinSemana a:active {color:#FF0000;text-decoration:none;}
  45. .calDiaVacio {background-color:#FFFFFF;color:#C9C9C9;font-family:Arial, Helvetica, sans-serif; font-size:11px; font-weight:700;text-align:center;}
  46. #paginador {background-color:#EEEEEE;height:30px;padding-top:7px;}
  47. #paginador a:link, #paginador a:visited{background-color:#A4A4A4;color:#FFFFFF;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  48. #paginador a:hover, #paginador a:active{background-color:#EEEEEE;color:#333333;font-family:Arial, Helvetica, sans-serif; font-size:9px; font-weight:900;text-decoration:none;padding:3pxborder: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;}
  49. </style>
  50. </head>
  51. <body bgcolor="#FFFFFF">
  52. <%
  53. Const URL = "OtraPagina.asp"
  54. Dim Mes, ElMes
  55. Dim Anyo, ElAnyo
  56. Dim FechaInicio, FechaActual, FechaFinal
  57. Dim DiaActual
  58. Dim i, SumarMesQuery, MesAnyo
  59. Dim PrimerDiaMes
  60. Dim Semana, nSemanas01, nSemanas31
  61. Dim DiasMesSiguiente, DiasMesAnterior
  62. Dim Columna, Fila
  63. Dim UltimoDiaMesAnterior
  64. Dim EstamosEnEl, cad
  65. Dim unmesmenos, unmesmas, menos, mas, mesmenos, mesmas, anyomas, anyomenos
  66.  
  67. ' Si viene vacía o no es numerica
  68. If Request.Querystring("mes") = "" or Not IsNumeric(Request.Querystring("mes")) then
  69. Mes = CInt(Month(Date))
  70. Else
  71. Mes = CInt(Request.Querystring("mes"))
  72. End If
  73. If Request.Querystring("anyo") = "" or Not IsNumeric(Request.Querystring("anyo")) then
  74. Anyo = CInt(Year(Date))
  75. Else
  76. Anyo = CInt(Request.Querystring("anyo"))
  77. End If
  78. FechaInicio = CDate("1/" & Month(Date) & "/" & Year(Date))
  79. FechaActual = CDate("1/" & Mes & "/" & Anyo)
  80. FechaFinal = DateAdd("m", 6, FechaInicio)
  81. %>
  82. <div style="background-color:#EEEEEE;padding-top:20px;border: 1px solid #C9C9C9;border-width: 1px 1px 1px 1px;">
  83. <!-- Empezamos a montar el Calendario -->
  84. <div id="ContenedorCalendario">
  85. <table border="0" cellspacing="0px" cellpadding="0px" width="85%" align="center">
  86. <tr>
  87. <%
  88. IF FechaActual > FechaFinal then ' Aún no ha progresado un año (empezó 01/03/2010 termina 01/09/2010)
  89. %>
  90. <td id="calFondoMes">No puede hacer una reserva con mas de 6 meses de antelación</td></tr></table>
  91. <div id="paginador" align="center">
  92. <a href="<%=Request.Servervariables("SCRIPT_NAME")%>?mes=<%=Month(FechaFinal)%>&anyo=<%=Year(FechaFinal)%>">Atr&aacute;s</a>
  93. </div>
  94. <%
  95. ELSEIF FechaActual < FechaInicio then ' Se ha manipulado las var con una fecha menor a la de inicio (empezó 01/03/2010 quiere imprimir 01/02/2010)
  96. %>
  97. <td id="calFondoMes">No puede hacer una reserva con una fecha ya pasada</td></tr></table>
  98. <div id="paginador" align="center">
  99. <a href="<%=Request.Servervariables("SCRIPT_NAME")%>?mes=<%=Month(Date)%>&anyo=<%=Year(Date)%>">Atr&aacute;s</a>
  100. </div>
  101. <%
  102. ELSE
  103. For i = 0 to 2
  104. SumarMesQuery = DateAdd("m", i, DateSerial(Anyo, Mes, 1))
  105. MesAnyo = Split(SumarMesQuery,"/")
  106. ElMes = MesAnyo(1)
  107. ElAnyo = MesAnyo(2)
  108. %>
  109. <td>
  110. <table border="0" cellspacing="1px" cellpadding="3px" width="200px" align="center" class="calFondoCalendario">
  111. <tr align="center">
  112. <td colspan="8">
  113. <div id="calFondoMes">
  114. <%=Nombre_Mes(ElMes)%>,&nbsp;<%=ElAnyo%>
  115. </div>
  116. <%
  117. Call Dias()
  118. DiaActual = 1
  119. PrimerDiaMes = DatePart("w", DateAdd("d", -1, DateSerial(ElAnyo, ElMes, 1)), vbMonday)
  120. Semana = DatePart("ww", CDate("01/" & ElMes & "/" & ElAnyo), vbMonday, vbFirstFourDays) ' Número de la semana del mes actual
  121. nSemanas31 = DatePart("ww", CDate("12/31/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semanas del año
  122. nSemanas01 = DatePart("ww", CDate("01/01/" & ElAnyo), vbMonday, vbFirstFourDays) 'Número de semana de la primera semana del año siguiente
  123. DiasMesSiguiente = 0
  124. For Fila = 0 to 5
  125. %>
  126. <tr height="20px">
  127. <%
  128. ' ============== Número de la Semana ==============
  129. IF Fila = 0 then
  130. If Semana = nSemanas01 then  'La última semana del año anterior comprende algún día del siguiente año
  131. %>
  132. <td class="calFondoNumeroSemanas"><%=Semana%></td>
  133. <%
  134. Else
  135. %>
  136. <td class="calFondoNumeroSemanas"><%if Len(Semana) = 1 then Response.Write "0"&Semana else Response.Write Semana end if%></td>
  137. <%
  138. End If
  139. ELSE
  140. If Semana >= nSemanas31 then 'Primera semana del año
  141. Semana = 1
  142. Else
  143. Semana = Semana +1
  144. End If
  145. %>
  146. <td class="calFondoNumeroSemanas"><%if Len(Semana) = 1 then Response.Write "0"&Semana else Response.Write Semana end if%></td>
  147. <%
  148. END IF
  149. ' ============== Fin  Número de la Semana ==============
  150. For Columna = 0 to 6
  151. IF Fila = 0 and Columna < PrimerDiaMes then ' No hay día
  152. UltimoDiaMesAnterior = UltimoDia((ElMes-1),ElAnyo)
  153. DiasMesAnterior = ((UltimoDiaMesAnterior - (PrimerDiaMes-1)) + Columna)
  154. %>
  155. <td class="calDiaVacio"><%=DiasMesAnterior%></td>
  156. <%
  157. ELSEIF DiaActual > UltimoDia(ElMes, ElAnyo) then ' No hay día
  158. DiasMesSiguiente = DiasMesSiguiente +1
  159. %>
  160. <td class="calDiaVacio"><%=DiasMesSiguiente%></td>
  161. <%
  162. ELSE
  163. EstamosEnEl = CDate(DiaActual & "/" & ElMes & "/" & ElAnyo)
  164. cad = EstamosEnEl & " = " & Join(arreglo, " or " & EstamosEnEl & " = ")
  165. %>
  166. <td bgcolor="#FFFFFF" align="center">
  167. <%
  168. If Columna = 5 or Columna = 6 then ' es fin de semana
  169. if eval(cad) Then ' lo marcamos con reservado
  170. %>
  171. <div id="calFinSemanaMarcado">
  172. <a href="<%=URL%>?day=<%=DiaActual%>&month=<%=ElMes%>&year=<%=ElAnyo%>"><%=DiaActual%></a>
  173. </div>
  174. <%
  175. else
  176. %>
  177. <div id="calFinSemana">
  178. <a href="<%=URL%>?day=<%=DiaActual%>&month=<%=ElMes%>&year=<%=ElAnyo%>"><%=DiaActual%></a>
  179. </div>
  180. <%
  181. end if
  182. Else
  183. if eval(cad) Then ' lo marcamos como reservado
  184. %>
  185. <div id="calDiasMarcado">
  186. <a href="<%=URL%>?day=<%=DiaActual%>&month=<%=ElMes%>&year=<%=ElAnyo%>"><%=DiaActual%></a>
  187. </div>
  188. <%
  189. else
  190. %>
  191. <div id="calDias">
  192. <a href="<%=URL%>?day=<%=DiaActual%>&month=<%=ElMes%>&year=<%=ElAnyo%>"><%=DiaActual%></a>
  193. </div>
  194. <%
  195. end if
  196. End If
  197. %>
  198. </td>
  199. <%
  200. DiaActual = DiaActual +1
  201. END IF
  202. Next ' Columna
  203. %>
  204. </tr>
  205. <%
  206. Next ' Fila
  207. %>
  208. </table></td>
  209. <%
  210. Next 'i
  211. %>
  212. </tr>
  213. </table>
  214. </div>
  215. <!-- Fin Calendario -->
  216. <!-- Paginador  -->
  217. <div id="paginador" align="center">
  218. <%
  219. unmesmenos = DateAdd("m", -3, DateSerial(ElAnyo, ElMes, 1))
  220. unmesmas = DateAdd("m", -1, DateSerial(ElAnyo, ElMes, 1))
  221. menos = split(unmesmenos, "/")
  222. mas = split(unmesmas, "/")
  223. mesmenos = menos(1)
  224. anyomenos = menos(2)
  225. mesmas = mas(1)
  226. anyomas = mas(2)
  227. %>
  228. <a href="<%=Request.Servervariables("SCRIPT_NAME")%>?mes=<%=mesmenos%>&anyo=<%=anyomenos%>">Anterior</a>
  229. <a href="<%=Request.Servervariables("SCRIPT_NAME")%>?mes=<%=mesmas%>&anyo=<%=anyomas%>">Siguiente</a>
  230. </div>
  231. <%
  232. END IF
  233. %>
  234. </div>
  235. <!-- Fin Paginador  -->
  236. </body>
  237. </html>
  238. <%
  239. Sub Dias()
  240. %>
  241. </td>
  242. </tr>
  243. <tr align="center">
  244. <td rows="6"><div class="calFondoSemanas">Sem</div></td>
  245. <td><div class="calFondoDias">Lun</div></td>
  246. <td><div class="calFondoDias">Mar</div></td>
  247. <td><div class="calFondoDias">Mi&eacute;</div></td>
  248. <td><div class="calFondoDias">Jue</div></td>
  249. <td><div class="calFondoDias">Vie</div></td>
  250. <td><div class="calFondoDias">S&aacute;b</div></td>
  251. <td><div class="calFondoDias">Dom</div></td>
  252. </tr>
  253. <%
  254. ' Sub y Funciones
  255. End Sub
  256.  
  257. Function Nombre_Mes(ElMes)
  258. Select Case ElMes
  259. Case 1
  260. Nombre_Mes = "Enero"
  261. Case 2
  262. Nombre_Mes = "Febrero"
  263. Case 3
  264. Nombre_Mes = "Marzo"
  265. Case 4
  266. Nombre_Mes = "Abril"
  267. Case 5
  268. Nombre_Mes = "Mayo"
  269. Case 6
  270. Nombre_Mes = "Junio"
  271. Case 7
  272. Nombre_Mes = "Julio"
  273. Case 8
  274. Nombre_Mes = "Agosto"
  275. Case 9
  276. Nombre_Mes = "Septiembre"
  277. Case 10
  278. Nombre_Mes = "Octubre"
  279. Case 11
  280. Nombre_Mes = "Noviembre"
  281. Case 12
  282. Nombre_Mes = "Diciembre"
  283. Case Else
  284. Nombre_Mes = "ERROR!"
  285. End Select
  286. End Function
  287.  
  288. Function UltimoDia(ElMes, ElAnyo)
  289. Select Case ElMes
  290. Case 1, 3, 5, 7, 8, 10, 12
  291. UltimoDia = 31
  292.  
  293. Case 4, 6, 9, 11
  294. UltimoDia = 30
  295.  
  296. Case 2
  297. If IsDate(ElAnyo & "-" & ElMes & "-" & "29") Then UltimoDia = 29 Else UltimoDia = 28
  298.  
  299. Case Else
  300. UltimoDia = 31
  301. End Select
  302. End Function
  303. %>

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 24/03/2010, 09:10
 
Fecha de Ingreso: febrero-2004
Mensajes: 85
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Calendario: que empiece por lunes en vez de domingo.

Adler, gracias por el ejemplo, pero he de hacerlo con el que he puesto yo. He estado mirando otros códigos de calendarios, y veo que para hacer que empieze por lunes en vez de dominog, y que los días del mes aparezcan correctamante hay que añadir un -2 para hacer que los números del mes se retrasen una posición. Algo así:

Cita:
FirstDayOfMonth = WeekDay(DateSerial(MyYear, MyMonth, 1)) -2
Pero no consigo aplicarlo a mi calendario. A ver si me podeis ayudar.
  #4 (permalink)  
Antiguo 24/03/2010, 12:03
 
Fecha de Ingreso: febrero-2004
Mensajes: 85
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: Calendario: que empiece por lunes en vez de domingo.

Ok, ya lo he solucionado. Simplemente poniendole un 2 a WeekDay de la siguiente forma:

Cita:
WeekDay(dDay,2)
De esta manera, conseguimos desplazar hacia atrás los días del mes para adaptarse al formato latino (L, M, M, J, V ,S y D)

Un saludo.

Etiquetas: calendario, domingo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:55.