Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Как найти последний день месяца?   Найти похожие ветки 

 
JetMan   (2004-09-20 06:50) [0]

Здравствуйте уважаемые эксперты!
Подскажите, есть ли какие-нибудь функций на Delphi для нахождения последнего дня месяца, т.е. узнать сколько дней в месяце. Пример, Февраль 28(29) дней, Январь 31 и т.д.


 
kukuikar ©   (2004-09-20 09:14) [1]

нет.
пишик код, определяй какой месяц, и соответсвенно указывай последний день. незабудь реализовать проверку на высокосный год, где в феврале 29 дней.
удачи.


 
TUser ©   (2004-09-20 09:17) [2]

Можно использовать DaysBetween и указать первое число данного месяца и первое число следующего.


 
Warlord   (2004-09-20 09:28) [3]

EndOfTheMonth()


 
Skyle ©   (2004-09-20 09:35) [4]


> Как найти последний день месяца?

Первый день следующего месяца минус 1.


 
JetMan   (2004-09-20 09:39) [5]

Спасибо!!!


 
mike-d ©   (2004-09-20 10:19) [6]

Еще вариант (из модуля SysUtils)

function IsLeapYear(Year: Word): Boolean;

{ The MonthDays array can be used to quickly find the number of
 days in a month:  MonthDays[IsLeapYear(Y), M]      }

const
 MonthDays: array [Boolean] of TDayTable =
   ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
    (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));


 
ghg ©   (2004-09-20 12:08) [7]

не в каждом високосном году в феврале 29 дней
если я все правильно помню


 
Romkin ©   (2004-09-20 12:12) [8]

ghg ©  (20.09.04 12:08) [7] Ты хотел сказать "Не в каждом четвертом" :)) IsLeapYear точно определяет, високосный год или нет .
Но лучше - первое число нужного месяца, incMonth и вычесть один день. Skyle ©  (20.09.04 09:35) [4]


 
ghg ©   (2004-09-20 12:14) [9]

>Romkin ©   (20.09.04 12:12) [8] ну да это и хотел сказать
поэтому самодельничеством лучше не заниматься а использовать [4] имхо


 
DarkMan   (2004-09-20 12:32) [10]

DaysInMonth


 
kukuikar ©   (2004-09-20 13:13) [11]

Проверку високосного года дай сам!

function LastDayOfMonth(const nom: Integer): Integer;
begin
 case nom of
   1: Result:=31;
   2: Result:=28;
   3: Result:=31;
   4: Result:=30;
   5: Result:=31;
   6: Result:=30;
   7: Result:=31;
   8: Result:=31;
   9: Result:=30;
   10: Result:=31;
   11: Result:=30;
   12: Result:=31;
 end;
end;


 
TUser ©   (2004-09-20 13:18) [12]


> Проверку високосного года дай сам!

:)


 
ghg ©   (2004-09-20 13:20) [13]

>kukuikar ©   (20.09.04 13:13) [11]
вопрос как раз в том какой год високосный а какой нет
см.[7,8]


 
kukuikar ©   (2004-09-20 13:21) [14]


> TUser ©   (20.09.04 13:18) [12]
>
> > Проверку високосного года дай сам!
>
> :)

ну а чё, мне еме все написать и скомпилировать может надо?:)


 
Skyle ©   (2004-09-20 13:22) [15]


> вопрос как раз в том какой год високосный а какой нет

IsLeapYear...

Но вот не могу понять, зачем такие извращения...


 
Coven   (2004-09-20 14:12) [16]

function GetLastDayMonth( d :TDate): TDate;
var
 yyy, mmm, ddd :word;
begin
 DecodeDate(d, yyy, mmm, ddd);
 mmm:=mmm+1;
 if mmm>12 then mmm:=1;
 ddd:=1;
 Result:=EncodeDate(yyy,mmm,ddd)-1;
end;


 
Skyle ©   (2004-09-20 14:30) [17]


> [16] Coven   (20.09.04 14:12)

Ой, а можно я тоже свой вариант предложу? ;-)))))))))))

function LastDayOfMonth(ADate : TDate) : TDate;
var Y, M, D : Word;
begin
 DecodeDate(ADate, Y, M, D);
 Result := EncodeDate(Y, M mod 12 + 1, 1) - 1;
end;


 
Vitaly ©   (2004-09-20 14:37) [18]

И какая дата будет:
LastDayOfMonth("12-dec-2004")?


 
SergP.   (2004-09-20 14:37) [19]


>  [11] kukuikar ©   (20.09.04 13:13)
> Проверку високосного года дай сам!
>
> function LastDayOfMonth(const nom: Integer): Integer;
> begin
>  case nom of
>    1: Result:=31;
>    2: Result:=28;
>    3: Result:=31;
>    4: Result:=30;
>    5: Result:=31;
>    6: Result:=30;
>    7: Result:=31;
>    8: Result:=31;
>    9: Result:=30;
>    10: Result:=31;
>    11: Result:=30;
>    12: Result:=31;
>  end;
> end;


function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
case nom of
  1: Result:=31;
  2: if ((year mod 4 =0)  and (year mod 100 >0)) or (year mod 400 = 0)
        then Result:=29
        else Result:=28;
  3: Result:=31;
  4: Result:=30;
  5: Result:=31;
  6: Result:=30;
  7: Result:=31;
  8: Result:=31;
  9: Result:=30;
  10: Result:=31;
  11: Result:=30;
  12: Result:=31;
end;
end;


 
Skyle ©   (2004-09-20 14:41) [20]


> [18] Vitaly ©   (20.09.04 14:37)

Нда... На год внимания не обратил...
Под конец рабочего дня и не такое пишут...;-)

Ну тогда так.

function LastDayOfMonth(ADate : TDate) : TDate;
var Y, M, D : Word;
begin
 DecodeDate(ADate, Y, M, D);
 Result := EncodeDate(Y + Ord(M = 12), M mod 12 + 1, 1) - 1;
end;


 
SergP.   (2004-09-20 14:46) [21]

function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
if nom=2
then   if ((year mod 4 =0)  and (year mod 100 >0)) or (year mod 400 = 0)
       then Result:=29
       else Result:=28
else   if (nom>7) xor (nom mod 2 = 1)
       then result:=31
       else result:=30;
end;


 
kukuikar ©   (2004-09-20 15:05) [22]


> SergP.   (20.09.04 14:46) [21]

все, мне кажется это логический конец этой дискуссии.


 
Ega23 ©   (2004-09-20 15:08) [23]

RXLib, uses DateUtil, FirstDayOfNextMonth-1.
Если последний день N-го месяца, то
IncMonth((FirstDayOfNextMonth-1),N).


 
art   (2004-09-20 19:55) [24]

Если имеешь Delphi7
sBuff1:="";sBuff2:="";sBuff3:="";sBuff4:="";yyyy:="";yy:="";mm:="";d1:="";d4:="";dd:="";//????????? ????????
 Label1.Caption:=TimeToStr(Time);                          //time ? ?????
//    yy:=AddChar("0", FormatDateTime("yy",Now+0.125), 2);    //???
обрати внимание на Now,Yesterday и т.д.^^^^^^^^^^^^^^^^^^^^^^^^    До Delphi7 в Delphi3-5 создавай конструкции case и т.д.              
//    mm:=AddChar("0", FormatDateTime("mm",Now+0.125), 2);    //?????
//    d1:=FormatDateTime("dd",Now+0.125);                     //????
   yy:=AddChar("0", FormatDateTime("yy",Yesterday+0.125), 2);//Delphi7 ???
   mm:=AddChar("0", FormatDateTime("mm",Yesterday+0.125), 2);//Delphi7 ?????
   dd:=AddChar("0", FormatDateTime("dd",Yesterday+0.125), 2);//Delphi7 ????
   Label10.Caption:="Yesterday:"+DateToStr(Yesterday);                                  //???? 0                    //Delphi7
//    d2int:=StrToInt(d1);                                    //????
//    d3int:=d2int-1;                                         //???? -1
//    d4:=IntToStr(d3int);                                    //????
//    dd:=AddChar("0",d4,2);                                  //???? 0


 
Fay ©   (2004-09-20 19:59) [25]

2  [24] art   (20.09.04 19:55)
Это что?! Что-то никак понять не могу.


 
Isaev   (2004-09-20 21:52) [26]

Mm:=номер месяца от 1 до 12

/..................../
If Mm=2 Then
 Begin
   If Gm Mod 4=0 Then I:=29
                 Else I:=28;
 End
       Else I:=30+Mm And 1 Xor Mm Shr 3;
/..................../
Я здесь случайно оказался, т.ч. если что не понятно, пиши на мыло
P.S.: тоже что-то слышал о том что не каждый 4 год високосный, но из ненадёжных источников, если кто точно знает напишите на мыло, если не сложно.С уважением Isaev!


 
Fay ©   (2004-09-20 21:55) [27]

2  [26] Isaev   (20.09.04 21:52)
Год является високосным, если он кратен 4.
... Но если он кратен 100, то он не високосный.
... Но если он кратен 400, то он всё-таки високосный 8)


 
SergP.   (2004-09-21 07:26) [28]


>  [22] kukuikar ©   (20.09.04 15:05)
>
> > SergP.   (20.09.04 14:46) [21]
>
> все, мне кажется это логический конец этой дискуссии.


Ну при желании можно еще немножко поизвращаться:

function LastDayOfMonth(const nom: byte; const year:word): byte;
begin
if nom=2
then   if ((year and 3 = 0)  and (year mod 25 > 0)) or (year and 15 = 0)
      then Result:=29
      else Result:=28
else   result:=Month shr 3 xor Month and 1 or 30;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.065 c
14-1095159096
Лиса
2004-09-14 14:51
2004.10.03
Как поздравить-порадовать сисадмина? Скоро у него День рождения!


1-1095454076
Heet
2004-09-18 00:47
2004.10.03
Как загрузить рисунок в FastReport во время выполнения?


14-1094822744
DSKalugin
2004-09-10 17:25
2004.10.03
Компоненты доступа к данным


4-1093000285
kukuikar
2004-08-20 15:11
2004.10.03
Как убрать или спрятать кнопку на InputBox?


1-1095422491
Tolik
2004-09-17 16:01
2004.10.03
ресурсы в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский