1 {*********************************************************}
3 { Zeos Database Objects }
4 { Variables classes and interfaces }
6 { Originally written by Sergey Seroukhov }
8 {*********************************************************}
10 {@********************************************************}
11 { Copyright (c) 1999-2012 Zeos Development Group }
13 { License Agreement: }
15 { This library is distributed in the hope that it will be }
16 { useful, but WITHOUT ANY WARRANTY; without even the }
17 { implied warranty of MERCHANTABILITY or FITNESS FOR }
18 { A PARTICULAR PURPOSE. See the GNU Lesser General }
19 { Public License for more details. }
21 { The source code of the ZEOS Libraries and packages are }
22 { distributed under the Library GNU General Public }
23 { License (see the file COPYING / COPYING.ZEOS) }
24 { with the following modification: }
25 { As a special exception, the copyright holders of this }
26 { library give you permission to link this library with }
27 { independent modules to produce an executable, }
28 { regardless of the license terms of these independent }
29 { modules, and to copy and distribute the resulting }
30 { executable under terms of your choice, provided that }
31 { you also meet, for each linked independent module, }
32 { the terms and conditions of the license of that module. }
33 { An independent module is a module which is not derived }
34 { from or based on this library. If you modify this }
35 { library, you may extend this exception to your version }
36 { of the library, but you are not obligated to do so. }
37 { If you do not wish to do so, delete this exception }
38 { statement from your version. }
41 { The project web site is located on: }
42 { http://zeos.firmos.at (FORUM) }
43 { http://sourceforge.net/p/zeoslib/tickets/ (BUGTRACKER)}
44 { svn://svn.code.sf.net/p/zeoslib/code-0/trunk (SVN) }
46 { http://www.sourceforge.net/projects/zeoslib. }
49 { Zeos Development Group. }
50 {********************************************************@}
52 unit ZFunctionsDateTime;
59 SysUtils, ZFunctions, ZExpression, ZVariant;
61 {** Date & time functions}
64 {** Implements a DATE function. }
65 TZDateFunction = class (TZAbstractFunction)
67 function Execute(Stack: TZExecutionStack;
68 VariantManager: IZVariantManager): TZVariant; override;
71 {** Implements a TIME function. }
72 TZTimeFunction = class (TZAbstractFunction)
74 function Execute(Stack: TZExecutionStack;
75 VariantManager: IZVariantManager): TZVariant; override;
78 {** Implements a NOW function. }
79 TZNowFunction = class (TZAbstractFunction)
81 function Execute(Stack: TZExecutionStack;
82 VariantManager: IZVariantManager): TZVariant; override;
85 {** Implements a ENCODEDATE function. }
86 TZEncodeDateFunction = class (TZAbstractFunction)
88 function Execute(Stack: TZExecutionStack;
89 VariantManager: IZVariantManager): TZVariant; override;
92 {** Implements a ENCODETIME function. }
93 TZEncodeTimeFunction = class (TZAbstractFunction)
95 function Execute(Stack: TZExecutionStack;
96 VariantManager: IZVariantManager): TZVariant; override;
99 {** Implements a COMPOSEDATETIME function. }
101 { TZComposeDateTimeFunction }
103 TZComposeDateTimeFunction = class (TZAbstractFunction)
105 function Execute(Stack: TZExecutionStack;
106 VariantManager: IZVariantManager): TZVariant; override;
109 {** Implements a INCDATE function. }
110 TZIncDateFunction = class (TZAbstractFunction)
112 function Execute(Stack: TZExecutionStack;
113 VariantManager: IZVariantManager): TZVariant; override;
116 {** Implements a INCTIME function. }
117 TZIncTimeFunction = class (TZAbstractFunction)
119 function Execute(Stack: TZExecutionStack;
120 VariantManager: IZVariantManager): TZVariant; override;
123 {** Implements a ISLEAPYEAR function. }
124 TZIsLeapYearFunction = class (TZAbstractFunction)
126 function Execute(Stack: TZExecutionStack;
127 VariantManager: IZVariantManager): TZVariant; override;
130 {-------------------- Extracting functions ----------------------------}
131 {** Implements a DATEOF function. }
132 TZDateOfFunction = class (TZAbstractFunction)
134 function Execute(Stack: TZExecutionStack;
135 VariantManager: IZVariantManager): TZVariant; override;
138 {** Implements a TIMEOF function. }
139 TZTimeOfFunction = class (TZAbstractFunction)
141 function Execute(Stack: TZExecutionStack;
142 VariantManager: IZVariantManager): TZVariant; override;
145 {** Implements a YEAROF function. }
146 TZYearOfFunction = class (TZAbstractFunction)
148 function Execute(Stack: TZExecutionStack;
149 VariantManager: IZVariantManager): TZVariant; override;
152 {** Implements a MONTHOF function. }
153 TZMonthOfFunction = class (TZAbstractFunction)
155 function Execute(Stack: TZExecutionStack;
156 VariantManager: IZVariantManager): TZVariant; override;
159 {** Implements a DAYOF function. }
160 TZDayOfFunction = class (TZAbstractFunction)
162 function Execute(Stack: TZExecutionStack;
163 VariantManager: IZVariantManager): TZVariant; override;
166 {** Implements a HOUROF function. }
167 TZHourOfFunction = class (TZAbstractFunction)
169 function Execute(Stack: TZExecutionStack;
170 VariantManager: IZVariantManager): TZVariant; override;
173 {** Implements a MINUTEOF function. }
174 TZMinuteOfFunction = class (TZAbstractFunction)
176 function Execute(Stack: TZExecutionStack;
177 VariantManager: IZVariantManager): TZVariant; override;
180 {** Implements a SECONDOF function. }
181 TZSecondOfFunction = class (TZAbstractFunction)
183 function Execute(Stack: TZExecutionStack;
184 VariantManager: IZVariantManager): TZVariant; override;
187 {** Implements a MILLISECONDOF function. }
188 TZMilliSecondOfFunction = class (TZAbstractFunction)
190 function Execute(Stack: TZExecutionStack;
191 VariantManager: IZVariantManager): TZVariant; override;
194 {-------------------- *OFTHEYEAR Extracting functions ----------------------------}
195 {** Implements a WEEKOFTHEYEAR function. }
196 TZWeekOfTheYearFunction = class (TZAbstractFunction)
198 function Execute(Stack: TZExecutionStack;
199 VariantManager: IZVariantManager): TZVariant; override;
202 {** Implements a DAYOFTHEYEAR function. }
203 TZDayOfTheYearFunction = class (TZAbstractFunction)
205 function Execute(Stack: TZExecutionStack;
206 VariantManager: IZVariantManager): TZVariant; override;
209 {** Implements a HOUROFTHEYEAR function. }
210 TZHourOfTheYearFunction = class (TZAbstractFunction)
212 function Execute(Stack: TZExecutionStack;
213 VariantManager: IZVariantManager): TZVariant; override;
216 {** Implements a MINUTEOFTHEYEAR function. }
217 TZMinuteOfTheYearFunction = class (TZAbstractFunction)
219 function Execute(Stack: TZExecutionStack;
220 VariantManager: IZVariantManager): TZVariant; override;
223 {** Implements a SECONDOFTHEYEAR function. }
224 TZSecondOfTheYearFunction = class (TZAbstractFunction)
226 function Execute(Stack: TZExecutionStack;
227 VariantManager: IZVariantManager): TZVariant; override;
230 {** Implements a MILLISECONDOFTHEYEAR function. }
231 TZMilliSecondOfTheYearFunction = class (TZAbstractFunction)
233 function Execute(Stack: TZExecutionStack;
234 VariantManager: IZVariantManager): TZVariant; override;
237 {-------------------- *OFTHEMONTH Extracting functions ----------------------------}
238 {** Implements a WEEKOFTHEMONTH function. }
239 TZWeekOfTheMonthFunction = class (TZAbstractFunction)
241 function Execute(Stack: TZExecutionStack;
242 VariantManager: IZVariantManager): TZVariant; override;
245 {** Implements a HOUROFTHEMONTH function. }
246 TZHourOfTheMonthFunction = class (TZAbstractFunction)
248 function Execute(Stack: TZExecutionStack;
249 VariantManager: IZVariantManager): TZVariant; override;
252 {** Implements a MINUTEOFTHEMONTH function. }
253 TZMinuteOfTheMonthFunction = class (TZAbstractFunction)
255 function Execute(Stack: TZExecutionStack;
256 VariantManager: IZVariantManager): TZVariant; override;
259 {** Implements a SECONDOFTHEMONTH function. }
260 TZSecondOfTheMonthFunction = class (TZAbstractFunction)
262 function Execute(Stack: TZExecutionStack;
263 VariantManager: IZVariantManager): TZVariant; override;
266 {** Implements a MILLISECONDOFTHEMONTH function. }
267 TZMilliSecondOfTheMonthFunction = class (TZAbstractFunction)
269 function Execute(Stack: TZExecutionStack;
270 VariantManager: IZVariantManager): TZVariant; override;
273 {-------------------- *OFTHEWEEK Extracting functions ----------------------------}
274 {** Implements a DAYOfTheWeek function. }
275 TZDayOfTheWeekFunction = class (TZAbstractFunction)
277 function Execute(Stack: TZExecutionStack;
278 VariantManager: IZVariantManager): TZVariant; override;
281 {** Implements a HOUROfTheWeek function. }
282 TZHourOfTheWeekFunction = class (TZAbstractFunction)
284 function Execute(Stack: TZExecutionStack;
285 VariantManager: IZVariantManager): TZVariant; override;
288 {** Implements a MINUTEOfTheWeek function. }
289 TZMinuteOfTheWeekFunction = class (TZAbstractFunction)
291 function Execute(Stack: TZExecutionStack;
292 VariantManager: IZVariantManager): TZVariant; override;
295 {** Implements a SECONDOfTheWeek function. }
296 TZSecondOfTheWeekFunction = class (TZAbstractFunction)
298 function Execute(Stack: TZExecutionStack;
299 VariantManager: IZVariantManager): TZVariant; override;
302 {** Implements a MILLISECONDOfTheWeek function. }
303 TZMilliSecondOfTheWeekFunction = class (TZAbstractFunction)
305 function Execute(Stack: TZExecutionStack;
306 VariantManager: IZVariantManager): TZVariant; override;
310 {---------------- *OFTHEDAY Extracting functions --------------------}
311 {** Implements a MINUTEOFTHEDAY function. }
312 TZMinuteOfTheDayFunction = class (TZAbstractFunction)
314 function Execute(Stack: TZExecutionStack;
315 VariantManager: IZVariantManager): TZVariant; override;
318 {** Implements a SECONDOFTHEDAY function. }
319 TZSecondOfTheDayFunction = class (TZAbstractFunction)
321 function Execute(Stack: TZExecutionStack;
322 VariantManager: IZVariantManager): TZVariant; override;
325 {** Implements a MILLISECONDOFTHEDAY function. }
326 TZMilliSecondOfTheDayFunction = class (TZAbstractFunction)
328 function Execute(Stack: TZExecutionStack;
329 VariantManager: IZVariantManager): TZVariant; override;
332 {---------------- *OfTheHour Extracting functions --------------------}
333 {** Implements a SECONDOFTHEHOUR function. }
334 TZSecondOfTheHourFunction = class (TZAbstractFunction)
336 function Execute(Stack: TZExecutionStack;
337 VariantManager: IZVariantManager): TZVariant; override;
340 {** Implements a MILLISECONDOFTHEHOUR function. }
341 TZMilliSecondOfTheHourFunction = class (TZAbstractFunction)
343 function Execute(Stack: TZExecutionStack;
344 VariantManager: IZVariantManager): TZVariant; override;
347 {---------------- *OFTHEMINUTE Extracting functions --------------------}
348 {** Implements a MILLISECONDOfTheHour function. }
349 TZMilliSecondOfTheMinuteFunction = class (TZAbstractFunction)
351 function Execute(Stack: TZExecutionStack;
352 VariantManager: IZVariantManager): TZVariant; override;
355 {---------------- *BETWEEN functions --------------------}
356 {** Implements a YEARSBETWEEN function. }
357 TZYearsBetweenFunction = class (TZAbstractFunction)
359 function Execute(Stack: TZExecutionStack;
360 VariantManager: IZVariantManager): TZVariant; override;
363 {** Implements a MONTHSBETWEEN function. }
364 TZMonthsBetweenFunction = class (TZAbstractFunction)
366 function Execute(Stack: TZExecutionStack;
367 VariantManager: IZVariantManager): TZVariant; override;
370 {** Implements a WEEKSBETWEEN function. }
371 TZWeeksBetweenFunction = class (TZAbstractFunction)
373 function Execute(Stack: TZExecutionStack;
374 VariantManager: IZVariantManager): TZVariant; override;
377 {** Implements a DAYSBETWEEN function. }
378 TZDaysBetweenFunction = class (TZAbstractFunction)
380 function Execute(Stack: TZExecutionStack;
381 VariantManager: IZVariantManager): TZVariant; override;
384 {** Implements a HOURSBETWEEN function. }
385 TZHoursBetweenFunction = class (TZAbstractFunction)
387 function Execute(Stack: TZExecutionStack;
388 VariantManager: IZVariantManager): TZVariant; override;
391 {** Implements a MINUTESBETWEEN function. }
392 TZMinutesBetweenFunction = class (TZAbstractFunction)
394 function Execute(Stack: TZExecutionStack;
395 VariantManager: IZVariantManager): TZVariant; override;
398 {** Implements a SECONDSBETWEEN function. }
399 TZSecondsBetweenFunction = class (TZAbstractFunction)
401 function Execute(Stack: TZExecutionStack;
402 VariantManager: IZVariantManager): TZVariant; override;
405 {** Implements a MILLISECONDSBETWEEN function. }
406 TZMillisecondsBetweenFunction = class (TZAbstractFunction)
408 function Execute(Stack: TZExecutionStack;
409 VariantManager: IZVariantManager): TZVariant; override;
412 procedure AddDateTimeFunctions(Functions : TZFunctionsList);
417 ZMessages, DateUtils;
419 Function IncDate(const aDate : TDateTime; const aYear, aMonth, aWeek, aDay : LongInt) : TDateTime;
422 if aYear <> 0 then Result := IncYear(Result, aYear);
423 if aMonth <> 0 then Result := IncMonth(Result, aMonth);
424 if aWeek <> 0 then Result := IncWeek(Result, aWeek);
425 if aDay <> 0 then Result := IncDay(Result, aDay);
428 Function IncTime(const aDate : TDateTime; const aHour, aMinute, aSecond, aMillisec : LongInt) : TDateTime;
430 Result := IncHour(IncMinute(IncSecond(IncMillisecond(aDate, aMilliSec),aSecond),aMinute),aHour);
435 function TZDateFunction.Execute(Stack: TZExecutionStack;
436 VariantManager: IZVariantManager): TZVariant;
438 CheckParamsCount(Stack, 0);
439 VariantManager.SetAsDateTime(Result, Date);
445 Executes this function.
446 @param Stack the stack object.
447 @param VariantManager a reference to variant processor object.
448 @returns a function value.
450 function TZTimeFunction.Execute(Stack: TZExecutionStack;
451 VariantManager: IZVariantManager): TZVariant;
453 CheckParamsCount(Stack, 0);
454 VariantManager.SetAsDateTime(Result, Time);
459 function TZNowFunction.Execute(Stack: TZExecutionStack;
460 VariantManager: IZVariantManager): TZVariant;
462 CheckParamsCount(Stack, 0);
463 VariantManager.SetAsDateTime(Result, Now);
466 { TZEncodeDateFunction }
468 function TZEncodeDateFunction.Execute(Stack: TZExecutionStack;
469 VariantManager: IZVariantManager): TZVariant;
471 ParamsCount: Integer;
472 Year , Month, Day : LongInt;
474 ParamsCount := VariantManager.GetAsInteger(Stack.GetParameter(0));
480 if ParamsCount > 0 then
481 Year := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount));
482 if ParamsCount > 1 then
483 Month := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-1));
484 if ParamsCount > 2 then
485 Day := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-2));
487 VariantManager.SetAsDateTime(Result, EncodeDate(Year,Month,Day));
490 { TZEncodeDateFunction }
492 function TZEncodeTimeFunction.Execute(Stack: TZExecutionStack;
493 VariantManager: IZVariantManager): TZVariant;
495 ParamsCount: Integer;
496 Hour , Minute, Second, MilliSecond : LongInt;
498 ParamsCount := VariantManager.GetAsInteger(Stack.GetParameter(0));
505 if ParamsCount > 0 then
506 Hour := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount));
507 if ParamsCount > 1 then
508 Minute := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-1));
509 if ParamsCount > 2 then
510 Second := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-2));
511 if ParamsCount > 3 then
512 MilliSecond := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-3));
514 VariantManager.SetAsDateTime(Result, EncodeTime(Hour,Minute,Second,MilliSecond));
517 { TZComposeDateTimeFunction }
519 function TZComposeDateTimeFunction.Execute(Stack: TZExecutionStack;
520 VariantManager: IZVariantManager): TZVariant;
522 CheckParamsCount(Stack, 2);
523 VariantManager.SetAsDateTime(Result, VariantManager.GetAsDateTime(Stack.GetParameter(2))+
524 VariantManager.GetAsDateTime(Stack.GetParameter(1)));
527 { TZIncDateFunction }
529 function TZIncDateFunction.Execute(Stack: TZExecutionStack;
530 VariantManager: IZVariantManager): TZVariant;
532 ParamsCount: Integer;
534 Year , Month, Week, Day : LongInt;
536 ParamsCount := VariantManager.GetAsInteger(Stack.GetParameter(0));
538 if (ParamsCount <= 2) then
539 raise TZExpressionError.Create(SExpectedMoreParams);
541 Date := VariantManager.GetAsDateTime(Stack.GetParameter(ParamsCount));
542 Year := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-1));
546 if ParamsCount > 2 then
547 Month := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-2));
548 if ParamsCount > 3 then
549 Week := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-3));
550 if ParamsCount > 4 then
551 Day := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-4));
553 VariantManager.SetAsDateTime(Result, IncDate(Date,Year,Month,Week,Day));
556 { TZIncTimeFunction }
558 function TZIncTimeFunction.Execute(Stack: TZExecutionStack;
559 VariantManager: IZVariantManager): TZVariant;
561 ParamsCount: Integer;
563 Hour , Minute, Second, MilliSecond : LongInt;
565 ParamsCount := VariantManager.GetAsInteger(Stack.GetParameter(0));
567 if (ParamsCount <= 2) then
568 raise TZExpressionError.Create(SExpectedMoreParams);
570 Date := VariantManager.GetAsDateTime(Stack.GetParameter(ParamsCount));
571 Hour := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-1));
577 if ParamsCount > 2 then
578 Minute := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-2));
579 if ParamsCount > 3 then
580 Second := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-3));
581 if ParamsCount > 4 then
582 MilliSecond := VariantManager.GetAsInteger(Stack.GetParameter(ParamsCount-4));
584 VariantManager.SetAsDateTime(Result, IncTime(Date, Hour,Minute,Second,MilliSecond));
587 { TZIsLeapYearFunction }
589 function TZIsLeapYearFunction.Execute(Stack: TZExecutionStack;
590 VariantManager: IZVariantManager): TZVariant;
592 CheckParamsCount(Stack, 1);
593 VariantManager.SetAsBoolean(Result, IsLeapYear(
594 VariantManager.GetAsInteger(Stack.GetParameter(1))));
599 function TZDateOfFunction.Execute(Stack: TZExecutionStack;
600 VariantManager: IZVariantManager): TZVariant;
602 CheckParamsCount(Stack, 1);
603 VariantManager.SetAsDateTime(Result, DateOf(
604 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
609 function TZTimeOfFunction.Execute(Stack: TZExecutionStack;
610 VariantManager: IZVariantManager): TZVariant;
612 CheckParamsCount(Stack, 1);
613 VariantManager.SetAsDateTime(Result, TimeOf(
614 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
619 function TZYearOfFunction.Execute(Stack: TZExecutionStack;
620 VariantManager: IZVariantManager): TZVariant;
622 CheckParamsCount(Stack, 1);
623 VariantManager.SetAsInteger(Result, YearOf(
624 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
627 { TZMonthOfFunction }
629 function TZMonthOfFunction.Execute(Stack: TZExecutionStack;
630 VariantManager: IZVariantManager): TZVariant;
632 CheckParamsCount(Stack, 1);
633 VariantManager.SetAsInteger(Result, MonthOf(
634 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
639 function TZDayOfFunction.Execute(Stack: TZExecutionStack;
640 VariantManager: IZVariantManager): TZVariant;
642 CheckParamsCount(Stack, 1);
643 VariantManager.SetAsInteger(Result, DayOf(
644 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
649 function TZHourOfFunction.Execute(Stack: TZExecutionStack;
650 VariantManager: IZVariantManager): TZVariant;
652 CheckParamsCount(Stack, 1);
653 VariantManager.SetAsInteger(Result, HourOf(
654 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
657 { TZMinuteOfFunction }
659 function TZMinuteOfFunction.Execute(Stack: TZExecutionStack;
660 VariantManager: IZVariantManager): TZVariant;
662 CheckParamsCount(Stack, 1);
663 VariantManager.SetAsInteger(Result, MinuteOf(
664 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
667 { TZSecondOfFunction }
669 function TZSecondOfFunction.Execute(Stack: TZExecutionStack;
670 VariantManager: IZVariantManager): TZVariant;
672 CheckParamsCount(Stack, 1);
673 VariantManager.SetAsInteger(Result, SecondOf(
674 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
677 { TZMilliSecondOfFunction }
679 function TZMilliSecondOfFunction.Execute(Stack: TZExecutionStack;
680 VariantManager: IZVariantManager): TZVariant;
682 CheckParamsCount(Stack, 1);
683 VariantManager.SetAsInteger(Result, MilliSecondOf(
684 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
687 { TZWeekOfTheYearFunction }
689 function TZWeekOfTheYearFunction.Execute(Stack: TZExecutionStack;
690 VariantManager: IZVariantManager): TZVariant;
692 CheckParamsCount(Stack, 1);
693 VariantManager.SetAsInteger(Result, WeekOfTheYear(
694 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
697 { TZDayOfTheYearFunction }
699 function TZDayOfTheYearFunction.Execute(Stack: TZExecutionStack;
700 VariantManager: IZVariantManager): TZVariant;
702 CheckParamsCount(Stack, 1);
703 VariantManager.SetAsInteger(Result, DayOfTheYear(
704 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
707 { TZHourOfTheYearFunction }
709 function TZHourOfTheYearFunction.Execute(Stack: TZExecutionStack;
710 VariantManager: IZVariantManager): TZVariant;
712 CheckParamsCount(Stack, 1);
713 VariantManager.SetAsInteger(Result, HourOfTheYear(
714 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
717 { TZMinuteOfTheYearFunction }
719 function TZMinuteOfTheYearFunction.Execute(Stack: TZExecutionStack;
720 VariantManager: IZVariantManager): TZVariant;
722 CheckParamsCount(Stack, 1);
723 VariantManager.SetAsInteger(Result, MinuteOfTheYear(
724 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
727 { TZSecondOfTheYearFunction }
729 function TZSecondOfTheYearFunction.Execute(Stack: TZExecutionStack;
730 VariantManager: IZVariantManager): TZVariant;
732 CheckParamsCount(Stack, 1);
733 VariantManager.SetAsInteger(Result, SecondOfTheYear(
734 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
737 { TZMilliSecondOfTheYearFunction }
739 function TZMilliSecondOfTheYearFunction.Execute(Stack: TZExecutionStack;
740 VariantManager: IZVariantManager): TZVariant;
741 {$IFDEF WITH_MILLISECONDOFTHEYEAR_BUG}
742 function MilliSecondOfTheYear(const AValue: TDateTime): Int64;
744 Result := MilliSecondOf(AValue) + Int64(SecondOfTheYear(AValue)) * MSecsPerSec;
748 CheckParamsCount(Stack, 1);
749 VariantManager.SetAsInteger(Result, MilliSecondOfTheYear(
750 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
753 { TZWeekOfTheMonthFunction }
755 function TZWeekOfTheMonthFunction.Execute(Stack: TZExecutionStack;
756 VariantManager: IZVariantManager): TZVariant;
758 CheckParamsCount(Stack, 1);
759 VariantManager.SetAsInteger(Result, WeekOfTheMonth(
760 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
763 { TZHourOfTheMonthFunction }
765 function TZHourOfTheMonthFunction.Execute(Stack: TZExecutionStack;
766 VariantManager: IZVariantManager): TZVariant;
768 CheckParamsCount(Stack, 1);
769 VariantManager.SetAsInteger(Result, HourOfTheMonth(
770 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
773 { TZMinuteOfTheMonthFunction }
775 function TZMinuteOfTheMonthFunction.Execute(Stack: TZExecutionStack;
776 VariantManager: IZVariantManager): TZVariant;
778 CheckParamsCount(Stack, 1);
779 VariantManager.SetAsInteger(Result, MinuteOfTheMonth(
780 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
783 { TZSecondOfTheMonthFunction }
785 function TZSecondOfTheMonthFunction.Execute(Stack: TZExecutionStack;
786 VariantManager: IZVariantManager): TZVariant;
788 CheckParamsCount(Stack, 1);
789 VariantManager.SetAsInteger(Result, SecondOfTheMonth(
790 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
793 { TZMilliSecondOfTheMonthFunction }
795 function TZMilliSecondOfTheMonthFunction.Execute(Stack: TZExecutionStack;
796 VariantManager: IZVariantManager): TZVariant;
798 CheckParamsCount(Stack, 1);
799 VariantManager.SetAsInteger(Result, MilliSecondOfTheMonth(
800 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
803 { TZDayOfTheWeekFunction }
805 function TZDayOfTheWeekFunction.Execute(Stack: TZExecutionStack;
806 VariantManager: IZVariantManager): TZVariant;
808 CheckParamsCount(Stack, 1);
809 VariantManager.SetAsInteger(Result, DayOfTheWeek(
810 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
813 { TZHourOfTheWeekFunction }
815 function TZHourOfTheWeekFunction.Execute(Stack: TZExecutionStack;
816 VariantManager: IZVariantManager): TZVariant;
818 CheckParamsCount(Stack, 1);
819 VariantManager.SetAsInteger(Result, HourOfTheWeek(
820 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
823 { TZMinuteOfTheWeekFunction }
825 function TZMinuteOfTheWeekFunction.Execute(Stack: TZExecutionStack;
826 VariantManager: IZVariantManager): TZVariant;
828 CheckParamsCount(Stack, 1);
829 VariantManager.SetAsInteger(Result, MinuteOfTheWeek(
830 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
833 { TZSecondOfTheWeekFunction }
835 function TZSecondOfTheWeekFunction.Execute(Stack: TZExecutionStack;
836 VariantManager: IZVariantManager): TZVariant;
838 CheckParamsCount(Stack, 1);
839 VariantManager.SetAsInteger(Result, SecondOfTheWeek(
840 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
843 { TZMilliSecondOfTheWeekFunction }
845 function TZMilliSecondOfTheWeekFunction.Execute(Stack: TZExecutionStack;
846 VariantManager: IZVariantManager): TZVariant;
848 CheckParamsCount(Stack, 1);
849 VariantManager.SetAsInteger(Result, MilliSecondOfTheWeek(
850 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
853 { TZMinuteOfTheDayFunction }
855 function TZMinuteOfTheDayFunction.Execute(Stack: TZExecutionStack;
856 VariantManager: IZVariantManager): TZVariant;
858 CheckParamsCount(Stack, 1);
859 VariantManager.SetAsInteger(Result, MinuteOfTheDay(
860 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
863 { TZSecondOfTheDayFunction }
865 function TZSecondOfTheDayFunction.Execute(Stack: TZExecutionStack;
866 VariantManager: IZVariantManager): TZVariant;
868 CheckParamsCount(Stack, 1);
869 VariantManager.SetAsInteger(Result, SecondOfTheDay(
870 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
873 { TZMilliSecondOfTheDayFunction }
875 function TZMilliSecondOfTheDayFunction.Execute(Stack: TZExecutionStack;
876 VariantManager: IZVariantManager): TZVariant;
878 CheckParamsCount(Stack, 1);
879 VariantManager.SetAsInteger(Result, MilliSecondOfTheDay(
880 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
883 { TZSecondOfTheHourFunction }
885 function TZSecondOfTheHourFunction.Execute(Stack: TZExecutionStack;
886 VariantManager: IZVariantManager): TZVariant;
888 CheckParamsCount(Stack, 1);
889 VariantManager.SetAsInteger(Result, SecondOfTheHour(
890 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
893 { TZMilliSecondOfTheHourFunction }
895 function TZMilliSecondOfTheHourFunction.Execute(Stack: TZExecutionStack;
896 VariantManager: IZVariantManager): TZVariant;
898 CheckParamsCount(Stack, 1);
899 VariantManager.SetAsInteger(Result, MilliSecondOfTheHour(
900 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
903 { TZMilliSecondOfTheMinuteFunction }
905 function TZMilliSecondOfTheMinuteFunction.Execute(Stack: TZExecutionStack;
906 VariantManager: IZVariantManager): TZVariant;
908 CheckParamsCount(Stack, 1);
909 VariantManager.SetAsInteger(Result, MilliSecondOfTheMinute(
910 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
913 { TZYearsBetweenFunction }
915 function TZYearsBetweenFunction.Execute(Stack: TZExecutionStack;
916 VariantManager: IZVariantManager): TZVariant;
918 CheckParamsCount(Stack, 2);
919 VariantManager.SetAsInteger(Result, YearsBetween(
920 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
921 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
924 { TZMonthsBetweenFunction }
926 function TZMonthsBetweenFunction.Execute(Stack: TZExecutionStack;
927 VariantManager: IZVariantManager): TZVariant;
929 CheckParamsCount(Stack, 2);
930 VariantManager.SetAsInteger(Result, MonthsBetween(
931 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
932 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
935 { TZWeeksBetweenFunction }
937 function TZWeeksBetweenFunction.Execute(Stack: TZExecutionStack;
938 VariantManager: IZVariantManager): TZVariant;
940 CheckParamsCount(Stack, 2);
941 VariantManager.SetAsInteger(Result, WeeksBetween(
942 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
943 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
946 { TZDaysBetweenFunction }
948 function TZDaysBetweenFunction.Execute(Stack: TZExecutionStack;
949 VariantManager: IZVariantManager): TZVariant;
951 CheckParamsCount(Stack, 2);
952 VariantManager.SetAsInteger(Result, DaysBetween(
953 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
954 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
957 { TZHoursBetweenFunction }
959 function TZHoursBetweenFunction.Execute(Stack: TZExecutionStack;
960 VariantManager: IZVariantManager): TZVariant;
962 CheckParamsCount(Stack, 2);
963 VariantManager.SetAsInteger(Result, HoursBetween(
964 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
965 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
968 { TZMinutesBetweenFunction }
970 function TZMinutesBetweenFunction.Execute(Stack: TZExecutionStack;
971 VariantManager: IZVariantManager): TZVariant;
973 CheckParamsCount(Stack, 2);
974 VariantManager.SetAsInteger(Result, MinutesBetween(
975 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
976 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
979 { TZSecondsBetweenFunction }
981 function TZSecondsBetweenFunction.Execute(Stack: TZExecutionStack;
982 VariantManager: IZVariantManager): TZVariant;
984 CheckParamsCount(Stack, 2);
985 VariantManager.SetAsInteger(Result, SecondsBetween(
986 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
987 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
990 { TZHoursBetweenFunction }
992 function TZMillisecondsBetweenFunction.Execute(Stack: TZExecutionStack;
993 VariantManager: IZVariantManager): TZVariant;
995 CheckParamsCount(Stack, 2);
996 VariantManager.SetAsInteger(Result, MillisecondsBetween(
997 VariantManager.GetAsDateTime(Stack.GetParameter(2)),
998 VariantManager.GetAsDateTime(Stack.GetParameter(1))));
1001 procedure AddDateTimeFunctions(Functions : TZFunctionsList);
1003 Functions.Add(TZDateFunction.Create('DATE'));
1004 Functions.Add(TZTimeFunction.Create('TIME'));
1005 Functions.Add(TZNowFunction.Create('NOW'));
1007 // First the Aliases
1009 Functions.Add(TZEncodeDateFunction.Create('ENCD'));
1010 Functions.Add(TZEncodeTimeFunction.Create('ENCT'));
1011 // Functions.Add(TZComposeDateTimeFunction.Create('COMPDT'));
1013 Functions.Add(TZIncDateFunction.Create('INCD'));
1014 Functions.Add(TZIncTimeFunction.Create('INCT'));
1016 Functions.Add(TZIsLeapYearFunction.Create('LEAPY'));
1018 // Functions.Add(TZDateOfFunction.Create('DATEOF'));
1019 // Functions.Add(TZTimeOfFunction.Create('TIMEOF'));
1021 // Functions.Add(TZYearOfFunction.Create('YEAROF'));
1022 // Functions.Add(TZMonthOfFunction.Create('MONTHOF'));
1023 // Functions.Add(TZDayOfFunction.Create('DAYOF'));
1024 // Functions.Add(TZHourOfFunction.Create('HOUROF'));
1026 Functions.Add(TZMinuteOfFunction.Create('MINOF'));
1027 Functions.Add(TZSecondOfFunction.Create('SECOF'));
1028 Functions.Add(TZMilliSecondOfFunction.Create('MSECOF'));
1030 Functions.Add(TZWeekOfTheYearFunction.Create('WofY'));
1031 Functions.Add(TZDayOfTheYearFunction.Create('DofY'));
1032 Functions.Add(TZHourOfTheYearFunction.Create('HofY'));
1033 Functions.Add(TZMinuteOfTheYearFunction.Create('MINofY'));
1034 Functions.Add(TZSecondOfTheYearFunction.Create('SECofY'));
1035 Functions.Add(TZMilliSecondOfTheYearFunction.Create('MSECofY'));
1037 Functions.Add(TZWeekOfTheMonthFunction.Create('WofM'));
1038 Functions.Add(TZHourOfTheMonthFunction.Create('HofM'));
1039 Functions.Add(TZMinuteOfTheMonthFunction.Create('MINofM'));
1040 Functions.Add(TZSecondOfTheMonthFunction.Create('SECofM'));
1041 Functions.Add(TZMilliSecondOfTheMonthFunction.Create('MSECofM'));
1043 Functions.Add(TZDayOfTheWeekFunction.Create('DofW'));
1044 Functions.Add(TZHourOfTheWeekFunction.Create('HofW'));
1045 Functions.Add(TZMinuteOfTheWeekFunction.Create('MINofW'));
1046 Functions.Add(TZSecondOfTheWeekFunction.Create('SECofW'));
1047 Functions.Add(TZMilliSecondOfTheWeekFunction.Create('MSECofW'));
1049 Functions.Add(TZMinuteOfTheDayFunction.Create('MINofD'));
1050 Functions.Add(TZSecondOfTheDayFunction.Create('SECofD'));
1051 Functions.Add(TZMilliSecondOfTheDayFunction.Create('MSECofD'));
1053 Functions.Add(TZSecondOfTheHourFunction.Create('SECofH'));
1054 Functions.Add(TZMilliSecondOfTheHourFunction.Create('MSECofH'));
1056 Functions.Add(TZMilliSecondOfTheMinuteFunction.Create('MSECofMIN'));
1058 Functions.Add(TZYearsBetweenFunction.Create('YBTW'));
1059 Functions.Add(TZMonthsBetweenFunction.Create('MBTW'));
1060 Functions.Add(TZWeeksBetweenFunction.Create('WBTW'));
1061 Functions.Add(TZDaysBetweenFunction.Create('DBTW'));
1062 Functions.Add(TZHoursBetweenFunction.Create('HBTW'));
1063 Functions.Add(TZMinutesBetweenFunction.Create('MINBTW'));
1064 Functions.Add(TZSecondsBetweenFunction.Create('SECBTW'));
1065 Functions.Add(TZMilliSecondsBetweenFunction.Create('MSECBTW'));
1069 Functions.Add(TZEncodeDateFunction.Create('ENCODEDATE'));
1070 Functions.Add(TZEncodeTimeFunction.Create('ENCODETIME'));
1071 Functions.Add(TZComposeDateTimeFunction.Create('COMPOSEDATETIME'));
1073 Functions.Add(TZIncDateFunction.Create('INCDATE'));
1074 Functions.Add(TZIncTimeFunction.Create('INCTIME'));
1076 Functions.Add(TZIsLeapYearFunction.Create('ISLEAPYEAR'));
1078 Functions.Add(TZDateOfFunction.Create('DATEOF'));
1079 Functions.Add(TZTimeOfFunction.Create('TIMEOF'));
1081 Functions.Add(TZYearOfFunction.Create('YEAROF'));
1082 Functions.Add(TZMonthOfFunction.Create('MONTHOF'));
1083 Functions.Add(TZDayOfFunction.Create('DAYOF'));
1084 Functions.Add(TZHourOfFunction.Create('HOUROF'));
1086 Functions.Add(TZMinuteOfFunction.Create('MINUTEOF'));
1087 Functions.Add(TZSecondOfFunction.Create('SECONDOF'));
1088 Functions.Add(TZMilliSecondOfFunction.Create('MILLISECONDOF'));
1090 Functions.Add(TZWeekOfTheYearFunction.Create('WEEKOFTHEYEAR'));
1091 Functions.Add(TZDayOfTheYearFunction.Create('DAYOFTHEYEAR'));
1092 Functions.Add(TZHourOfTheYearFunction.Create('HOUROFTHEYEAR'));
1093 Functions.Add(TZMinuteOfTheYearFunction.Create('MINUTEOFTHEYEAR'));
1094 Functions.Add(TZSecondOfTheYearFunction.Create('SECONDOFTHEYEAR'));
1095 Functions.Add(TZMilliSecondOfTheYearFunction.Create('MILLISECONDOFTHEYEAR'));
1097 Functions.Add(TZWeekOfTheMonthFunction.Create('WEEKOFTHEMONTH'));
1098 Functions.Add(TZHourOfTheMonthFunction.Create('HOUROFTHEMONTH'));
1099 Functions.Add(TZMinuteOfTheMonthFunction.Create('MINUTEOFTHEMONTH'));
1100 Functions.Add(TZSecondOfTheMonthFunction.Create('SECONDOFTHEMONTH'));
1101 Functions.Add(TZMilliSecondOfTheMonthFunction.Create('MILLISECONDOFTHEMONTH'));
1103 Functions.Add(TZDayOfTheWeekFunction.Create('DAYOFTHEWEEK'));
1104 Functions.Add(TZHourOfTheWeekFunction.Create('HOUROFTHEWEEK'));
1105 Functions.Add(TZMinuteOfTheWeekFunction.Create('MINUTEOFTHEWEEK'));
1106 Functions.Add(TZSecondOfTheWeekFunction.Create('SECONDOFTHEWEEK'));
1107 Functions.Add(TZMilliSecondOfTheWeekFunction.Create('MILLISECONDOFTHEWEEK'));
1109 Functions.Add(TZMinuteOfTheDayFunction.Create('MINUTEOFTHEDAY'));
1110 Functions.Add(TZSecondOfTheDayFunction.Create('SECONDOFTHEDAY'));
1111 Functions.Add(TZMilliSecondOfTheDayFunction.Create('MILLISECONDOFTHEDAY'));
1113 Functions.Add(TZSecondOfTheHourFunction.Create('SECONDOFTHEHOUR'));
1114 Functions.Add(TZMilliSecondOfTheHourFunction.Create('MILLISECONDOFTHEHOUR'));
1116 Functions.Add(TZMilliSecondOfTheMinuteFunction.Create('MILLISECONDOFTHEMINUTE'));
1118 Functions.Add(TZYearsBetweenFunction.Create('YEARSBETWEEN'));
1119 Functions.Add(TZMonthsBetweenFunction.Create('MONTHSBETWEEN'));
1120 Functions.Add(TZWeeksBetweenFunction.Create('WEEKSBETWEEN'));
1121 Functions.Add(TZDaysBetweenFunction.Create('DAYSBETWEEN'));
1122 Functions.Add(TZHoursBetweenFunction.Create('HOURSBETWEEN'));
1123 Functions.Add(TZMinutesBetweenFunction.Create('MINUTESBETWEEN'));
1124 Functions.Add(TZSecondsBetweenFunction.Create('SECONDSBETWEEN'));
1125 Functions.Add(TZMilliSecondsBetweenFunction.Create('MILLISECONDSBETWEEN'));