package flare.query
{
    /**
     * Utility class providing functions for manipulating <code>Date</code>
     * objects. These functions are intended for use by the
     * <code>Fn</code> operator.
     */
    public class DateUtil
    {

// ADDDATE()(v4.1.1)     Add dates
// ADDTIME()(v4.1.1)     Add time
// CONVERT_TZ()(v4.1.3)     Convert from one timezone to another
// CURDATE()     Return the current date
// CURRENT_DATE(), CURRENT_DATE     Synonyms for CURDATE()
// CURRENT_TIME(), CURRENT_TIME     Synonyms for CURTIME()
// CURTIME()     Return the current time
// DATE_ADD()     Add two dates
// DATE_FORMAT()     Format date as specified
// DATE_SUB()     Subtract two dates
// DATE()(v4.1.1)     Extract the date part of a date or datetime expression
// DATEDIFF()(v4.1.1)     Subtract two dates

// DAYNAME()(v4.1.21)     Return the name of the weekday

        // DAYOFMONTH()     Return the day of the month (1-31)
        // DAY()(v4.1.1)     Synonym for DAYOFMONTH()
        public static function day(d:Date):int
        {
            return d.date;
        }

        // DAYOFWEEK()     Return the weekday index of the argument
        // WEEKDAY()     Return the weekday index
        public static function dayOfWeek(d:Date):int
        {
            return d.day;
        }
        
// DAYOFYEAR()     Return the day of the year (1-366)
// EXTRACT     Extract part of a date
// FROM_DAYS()     Convert a day number to a date
// FROM_UNIXTIME()     Format date as a UNIX timestamp
// GET_FORMAT()(v4.1.1)     Return a date format string

        // HOUR()     Extract the hour
        public static function hour(d:Date):int
        {
            return d.hours;
        }
        
// LAST_DAY(v4.1.1)     Return the last day of the month for the argument
// MAKEDATE()(v4.1.1)     Create a date from the year and day of year
// MAKETIME(v4.1.1)     MAKETIME()

        // MICROSECOND()(v4.1.1)     Return the microseconds from argument
        public static function microsecond(d:Date):int
        {
            return int(1000 * d.time) % 1000000;
        }
        
        // MINUTE()     Return the minute from the argument
        public static function minute(d:Date):int
        {
            return d.minutes;
        }
        
        // MONTH()     Return the month from the date passed
        public static function month(d:Date):int
        {
            return d.month;
        }
        
// MONTHNAME()(v4.1.21)     Return the name of the month

        // NOW()     Return the current date and time
        // LOCALTIME(), LOCALTIME     Synonym for NOW()
        // LOCALTIMESTAMP, LOCALTIMESTAMP()(v4.0.6)     Synonym for NOW()
        // CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP     Synonyms for NOW()
        public static function now():Date
        {
            return new Date();
        }

// PERIOD_ADD()     Add a period to a year-month
// PERIOD_DIFF()     Return the number of months between periods
// QUARTER()     Return the quarter from a date argument
// SEC_TO_TIME()     Converts seconds to 'HH:MM:SS' format

        // SECOND()     Return the second (0-59)
        public static function second(d:Date):int
        {
            return d.seconds;
        }

// STR_TO_DATE()(v4.1.1)     Convert a string to a date
// SUBDATE()     When invoked with three arguments a synonym for DATE_SUB()
// SUBTIME()(v4.1.1)     Subtract times
// SYSDATE()     Return the time at which the function executes
// TIME_FORMAT()     Format as time
// TIME_TO_SEC()     Return the argument converted to seconds
// TIME()(v4.1.1)     Extract the time portion of the expression passed
// TIMEDIFF()(v4.1.1)     Subtract time
// TIMESTAMP()(v4.1.1)     With a single argument, this function returns the date or datetime expression. With two arguments, the sum of the arguments
// TIMESTAMPADD()(v5.0.0)     Add an interval to a datetime expression
// TIMESTAMPDIFF()(v5.0.0)     Subtract an interval from a datetime expression
// TO_DAYS()     Return the date argument converted to days
// UNIX_TIMESTAMP()     Return a UNIX timestamp
// TC_DATE()(v4.1.1)     Return the current UTC date
// UTC_TIME()(v4.1.1)     Return the current UTC time
// UTC_TIMESTAMP()(v4.1.1)     Return the current UTC date and time
// WEEK()     Return the week number
// WEEKOFYEAR()(v4.1.1)     Return the calendar week of the date (1-53)

        // YEAR()     Return the year
        public static function year(d:Date):int
        {
            return d.fullYear;
        }
        
// YEARWEEK()     Return the year and week

    } // end of class DateUtil
}