Example #1
0
/**
	Return formatted date based on timestamp $d
*/
function adodb_date($fmt, $d = false, $is_gmt = false)
{
    static $daylight;
    global $ADODB_DATETIME_CLASS;
    if ($d === false) {
        return $is_gmt ? @gmdate($fmt) : @date($fmt);
    }
    if (!defined('ADODB_TEST_DATES')) {
        if (abs($d) <= 0x7fffffff) {
            // check if number in 32-bit signed range
            if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) {
                // if windows, must be +ve integer
                return $is_gmt ? @gmdate($fmt, $d) : @date($fmt, $d);
            }
        }
    }
    $_day_power = 86400;
    $arr = _adodb_getdate($d, true, $is_gmt);
    if (!isset($daylight)) {
        $daylight = function_exists('adodb_daylight_sv');
    }
    if ($daylight) {
        adodb_daylight_sv($arr, $is_gmt);
    }
    $year = $arr['year'];
    $month = $arr['mon'];
    $day = $arr['mday'];
    $hour = $arr['hours'];
    $min = $arr['minutes'];
    $secs = $arr['seconds'];
    $max = strlen($fmt);
    $dates = '';
    $isphp5 = PHP_VERSION >= 5;
    /*
    	at this point, we have the following integer vars to manipulate:
    	$year, $month, $day, $hour, $min, $secs
    */
    for ($i = 0; $i < $max; $i++) {
        switch ($fmt[$i]) {
            case 'T':
                if ($ADODB_DATETIME_CLASS) {
                    $dt = new DateTime();
                    $dt->SetDate($year, $month, $day);
                    $dates .= $dt->Format('T');
                } else {
                    $dates .= date('T');
                }
                break;
                // YEAR
            // YEAR
            case 'L':
                $dates .= $arr['leap'] ? '1' : '0';
                break;
            case 'r':
                // Thu, 21 Dec 2000 16:01:07 +0200
                // 4.3.11 uses '04 Jun 2004'
                // 4.3.8 uses  ' 4 Jun 2004'
                $dates .= gmdate('D', $_day_power * (3 + adodb_dow($year, $month, $day))) . ', ' . ($day < 10 ? '0' . $day : $day) . ' ' . date('M', mktime(0, 0, 0, $month, 2, 1971)) . ' ' . $year . ' ';
                if ($hour < 10) {
                    $dates .= '0' . $hour;
                } else {
                    $dates .= $hour;
                }
                if ($min < 10) {
                    $dates .= ':0' . $min;
                } else {
                    $dates .= ':' . $min;
                }
                if ($secs < 10) {
                    $dates .= ':0' . $secs;
                } else {
                    $dates .= ':' . $secs;
                }
                $gmt = adodb_get_gmt_diff($year, $month, $day);
                $dates .= ' ' . adodb_tz_offset($gmt, $isphp5);
                break;
            case 'Y':
                $dates .= $year;
                break;
            case 'y':
                $dates .= substr($year, strlen($year) - 2, 2);
                break;
                // MONTH
            // MONTH
            case 'm':
                if ($month < 10) {
                    $dates .= '0' . $month;
                } else {
                    $dates .= $month;
                }
                break;
            case 'Q':
                $dates .= $month + 3 >> 2;
                break;
            case 'n':
                $dates .= $month;
                break;
            case 'M':
                $dates .= date('M', mktime(0, 0, 0, $month, 2, 1971));
                break;
            case 'F':
                $dates .= date('F', mktime(0, 0, 0, $month, 2, 1971));
                break;
                // DAY
            // DAY
            case 't':
                $dates .= $arr['ndays'];
                break;
            case 'z':
                $dates .= $arr['yday'];
                break;
            case 'w':
                $dates .= adodb_dow($year, $month, $day);
                break;
            case 'l':
                $dates .= gmdate('l', $_day_power * (3 + adodb_dow($year, $month, $day)));
                break;
            case 'D':
                $dates .= gmdate('D', $_day_power * (3 + adodb_dow($year, $month, $day)));
                break;
            case 'j':
                $dates .= $day;
                break;
            case 'd':
                if ($day < 10) {
                    $dates .= '0' . $day;
                } else {
                    $dates .= $day;
                }
                break;
            case 'S':
                $d10 = $day % 10;
                if ($d10 == 1) {
                    $dates .= 'st';
                } else {
                    if ($d10 == 2 && $day != 12) {
                        $dates .= 'nd';
                    } else {
                        if ($d10 == 3) {
                            $dates .= 'rd';
                        } else {
                            $dates .= 'th';
                        }
                    }
                }
                break;
                // HOUR
            // HOUR
            case 'Z':
                $dates .= $is_gmt ? 0 : -adodb_get_gmt_diff($year, $month, $day);
                break;
            case 'O':
                $gmt = $is_gmt ? 0 : adodb_get_gmt_diff($year, $month, $day);
                $dates .= adodb_tz_offset($gmt, $isphp5);
                break;
            case 'H':
                if ($hour < 10) {
                    $dates .= '0' . $hour;
                } else {
                    $dates .= $hour;
                }
                break;
            case 'h':
                if ($hour > 12) {
                    $hh = $hour - 12;
                } else {
                    if ($hour == 0) {
                        $hh = '12';
                    } else {
                        $hh = $hour;
                    }
                }
                if ($hh < 10) {
                    $dates .= '0' . $hh;
                } else {
                    $dates .= $hh;
                }
                break;
            case 'G':
                $dates .= $hour;
                break;
            case 'g':
                if ($hour > 12) {
                    $hh = $hour - 12;
                } else {
                    if ($hour == 0) {
                        $hh = '12';
                    } else {
                        $hh = $hour;
                    }
                }
                $dates .= $hh;
                break;
                // MINUTES
            // MINUTES
            case 'i':
                if ($min < 10) {
                    $dates .= '0' . $min;
                } else {
                    $dates .= $min;
                }
                break;
                // SECONDS
            // SECONDS
            case 'U':
                $dates .= $d;
                break;
            case 's':
                if ($secs < 10) {
                    $dates .= '0' . $secs;
                } else {
                    $dates .= $secs;
                }
                break;
                // AM/PM
                // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
            // AM/PM
            // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
            case 'a':
                if ($hour >= 12) {
                    $dates .= 'pm';
                } else {
                    $dates .= 'am';
                }
                break;
            case 'A':
                if ($hour >= 12) {
                    $dates .= 'PM';
                } else {
                    $dates .= 'AM';
                }
                break;
            default:
                $dates .= $fmt[$i];
                break;
                // ESCAPE
            // ESCAPE
            case "\\":
                $i++;
                if ($i < $max) {
                    $dates .= $fmt[$i];
                }
                break;
        }
    }
    return $dates;
}
Example #2
0
/**
	Return formatted date based on timestamp $d
*/
function adodb_date($fmt, $d = false, $is_gmt = false)
{
    if ($d === false) {
        return date($fmt);
    }
    if (!defined('ADODB_TEST_DATES')) {
        if (abs($d) <= 0x7fffffff) {
            // check if number in 32-bit signed range
            if (!defined('ADODB_NO_NEGATIVE_TS') || $d >= 0) {
                // if windows, must be +ve integer
                return @date($fmt, $d);
            }
        }
    }
    $_day_power = 86400;
    $arr = _adodb_getdate($d, true, $is_gmt);
    $year = $arr['year'];
    $month = $arr['mon'];
    $day = $arr['mday'];
    $hour = $arr['hours'];
    $min = $arr['minutes'];
    $secs = $arr['seconds'];
    $max = strlen($fmt);
    $dates = '';
    /*
    	at this point, we have the following integer vars to manipulate:
    	$year, $month, $day, $hour, $min, $secs
    */
    for ($i = 0; $i < $max; $i++) {
        switch ($fmt[$i]) {
            case 'T':
                $dates .= date('T');
                break;
                // YEAR
            // YEAR
            case 'L':
                $dates .= $arr['leap'] ? '1' : '0';
                break;
            case 'r':
                // Thu, 21 Dec 2000 16:01:07 +0200
                $dates .= gmdate('D', $_day_power * (3 + adodb_dow($year, $month, $day))) . ', ' . ($day < 10 ? ' ' . $day : $day) . ' ' . date('M', mktime(0, 0, 0, $month, 2, 1971)) . ' ' . $year . ' ';
                if ($hour < 10) {
                    $dates .= '0' . $hour;
                } else {
                    $dates .= $hour;
                }
                if ($min < 10) {
                    $dates .= ':0' . $min;
                } else {
                    $dates .= ':' . $min;
                }
                if ($secs < 10) {
                    $dates .= ':0' . $secs;
                } else {
                    $dates .= ':' . $secs;
                }
                $gmt = adodb_get_gmt_different();
                $dates .= sprintf(' %s%04d', $gmt < 0 ? '+' : '-', abs($gmt) / 36);
                break;
            case 'Y':
                $dates .= $year;
                break;
            case 'y':
                $dates .= substr($year, strlen($year) - 2, 2);
                break;
                // MONTH
            // MONTH
            case 'm':
                if ($month < 10) {
                    $dates .= '0' . $month;
                } else {
                    $dates .= $month;
                }
                break;
            case 'n':
                $dates .= $month;
                break;
            case 'M':
                $dates .= date('M', mktime(0, 0, 0, $month, 2, 1971));
                break;
            case 'F':
                $dates .= date('F', mktime(0, 0, 0, $month, 2, 1971));
                break;
                // DAY
            // DAY
            case 't':
                $dates .= $arr['ndays'];
                break;
            case 'z':
                $dates .= $arr['yday'];
                break;
            case 'w':
                $dates .= adodb_dow($year, $month, $day);
                break;
            case 'l':
                $dates .= gmdate('l', $_day_power * (3 + adodb_dow($year, $month, $day)));
                break;
            case 'D':
                $dates .= gmdate('D', $_day_power * (3 + adodb_dow($year, $month, $day)));
                break;
            case 'j':
                $dates .= $day;
                break;
            case 'd':
                if ($day < 10) {
                    $dates .= '0' . $day;
                } else {
                    $dates .= $day;
                }
                break;
            case 'S':
                $d10 = $day % 10;
                if ($d10 == 1) {
                    $dates .= 'st';
                } else {
                    if ($d10 == 2) {
                        $dates .= 'nd';
                    } else {
                        if ($d10 == 3) {
                            $dates .= 'rd';
                        } else {
                            $dates .= 'th';
                        }
                    }
                }
                break;
                // HOUR
            // HOUR
            case 'Z':
                $dates .= $is_gmt ? 0 : -adodb_get_gmt_different();
                break;
            case 'O':
                $gmt = $is_gmt ? 0 : adodb_get_gmt_different();
                $dates .= sprintf('%s%04d', $gmt < 0 ? '+' : '-', abs($gmt) / 36);
                break;
            case 'H':
                if ($hour < 10) {
                    $dates .= '0' . $hour;
                } else {
                    $dates .= $hour;
                }
                break;
            case 'h':
                if ($hour > 12) {
                    $hh = $hour - 12;
                } else {
                    if ($hour == 0) {
                        $hh = '12';
                    } else {
                        $hh = $hour;
                    }
                }
                if ($hh < 10) {
                    $dates .= '0' . $hh;
                } else {
                    $dates .= $hh;
                }
                break;
            case 'G':
                $dates .= $hour;
                break;
            case 'g':
                if ($hour > 12) {
                    $hh = $hour - 12;
                } else {
                    if ($hour == 0) {
                        $hh = '12';
                    } else {
                        $hh = $hour;
                    }
                }
                $dates .= $hh;
                break;
                // MINUTES
            // MINUTES
            case 'i':
                if ($min < 10) {
                    $dates .= '0' . $min;
                } else {
                    $dates .= $min;
                }
                break;
                // SECONDS
            // SECONDS
            case 'U':
                $dates .= $d;
                break;
            case 's':
                if ($secs < 10) {
                    $dates .= '0' . $secs;
                } else {
                    $dates .= $secs;
                }
                break;
                // AM/PM
                // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
            // AM/PM
            // Note 00:00 to 11:59 is AM, while 12:00 to 23:59 is PM
            case 'a':
                if ($hour >= 12) {
                    $dates .= 'pm';
                } else {
                    $dates .= 'am';
                }
                break;
            case 'A':
                if ($hour >= 12) {
                    $dates .= 'PM';
                } else {
                    $dates .= 'AM';
                }
                break;
            default:
                $dates .= $fmt[$i];
                break;
                // ESCAPE
            // ESCAPE
            case "\\":
                $i++;
                if ($i < $max) {
                    $dates .= $fmt[$i];
                }
                break;
        }
    }
    return $dates;
}