PDA

Ver la Versión Completa : Ayuda con función para detectar días.


pabloe9k
31-10-2013, 17:50:45
Hola a todos.
Necesito de su ayuda, gente.
Tendría que hacer una función que me devuelva la cantidad de días martes que tiene el mes en curso.
Por las dudas, aclaro que son muy básicos mis conocimientos de Delphi, con lo cual la respuesta con la que me ayuden tendría que tener el código de la función completo.
Si pueden darme una mano, será realmente una ayuda!!
Muchas gracias.
Saludos.

ecfisa
31-10-2013, 19:26:45
Hola pabloe9k, bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).


uses DateUtils;

function CountSameDay(const aYear, aMonth, aDay: Word): Integer;
var
i: Integer;
begin
Result := 0;
for i := 1 to DaysInAMonth(aYear, aMonth) do
if DayOfTheWeek(EncodeDate(aYear, aMonth, i)) = aDay then
Inc(Result);
end;


Ejemplo de uso:

procedure TForm1.Button1Click(Sender: TObject);
var
mes, anio : Word;
begin
mes := 10;
anio := 2013;
ShowMessage(Format('El mes %d de %d tiene %d días martes',
[mes,anio,CountSameDay(anio ,mes, DayTuesday)]));
end;

La función te sirve para cualquier día, lo envio como argumento (aDay), usando las constantes simbólicas declaradas en la unidad DateUtils:

const
DayMonday = 1;
DayTuesday = 2;
DayWednesday = 3;
DayThursday = 4;
DayFriday = 5;
DaySaturday = 6;
DaySunday = 7;


Saludos :)

nlsgarcia
31-10-2013, 20:04:49
pabloe9k,


...una función que me devuelva la cantidad de días martes que tiene el mes en curso...


Revisa este código:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DateUtils, ComCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
MonthCalendar1: TMonthCalendar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

// Calcula la cantidad de días Martes de un Mes y Año específico
procedure TForm1.Button1Click(Sender: TObject);
const
NameMonth : Array[1..12] of String = ('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic');

var
i : Integer;
DateSearch : TDate;
Year, Month, Days, DaysMonth : Word;

begin

DateSearch := MonthCalendar1.Date;
Year := StrToInt(FormatDateTime('y',DateSearch));
Month := StrToInt(FormatDateTime('m',DateSearch));
DaysMonth := DaysInAMonth(Year,Month);

for i := 1 to DaysMonth do
if FormatDateTime('ddd', EncodeDate(Year,Month,i)) = 'Tue' then
inc(Days);

MessageDlg(Format('El Mes de %s tiene %d días Martes',[NameMonth[Month],Days]),mtInformation,[mbOK],0);

end;

end.

El código anterior calcula la cantidad de días Martes de un Mes y Año específico como se puede apreciar en la siguiente imagen:

http://img801.imageshack.us/img801/2568/ibx5.jpg

Espero sea útil :)

Nelson.

pabloe9k
01-11-2013, 16:23:25
Muchas, muchas gracias a ambos!
Ya me pongo a probarlo.

Saludos!