VN:F [1.8.0_1031]
Rating: 0.0/10 (0 votes cast)

I was playing around and wondered how accurate would it be to use a negative unix timestamp. Well, it appears to be pretty accurate.

Check it out, here’s a generic function.

function backdate($time){

    $day = 86400;
    $year = 31536000;

    if($time <= 0){
        $timeleft = $time;
        $yy = (floor($timeleft/$year))*-1;
        $timeleft = $timeleft + ($yy*$year);
        $dd = floor($timeleft/$day);
        $year = "19".(70-$yy);
        $yyy = intval((72-(70-$yy))/4);

    }else{
        $timeleft = $time;
        $yy = intval($timeleft/$year);
        $timeleft = $timeleft - ($yy*$year);
        $dd = intval($timeleft/$day);
        $yyy = (intval($yy/4)*-1)+1;
        $x = 70+$yy;
        if($x > 99){
            $x = $x - 100;
            if($x<=9){$x="0".$x;}
            $year = "20".$x;
        }else{
            $year = "19".(70+$yy);
        }

    }

    $yyy = $yyy;
    $dd = $dd+$yyy;

    if($dd > 365){
        $year = $year+1;
        $dd = $dd - 365;

    }

    if($dd < 1){
        $year = $year-1;
        $dd = 365+$dd;
    }

    if($dd >= 1 && $dd <= 31){
        $mm = 1;
    }else if($dd >= 32 && $dd <= 59){
        $mm = 2;
        $dd = $dd - 31;
    }else if($dd >= 60 && $dd <= 90){
        $mm = 3;
        $dd = $dd - 59;
    }else if($dd >= 91 && $dd <= 120){
        $mm = 4;
        $dd = $dd - 90;
    }else if($dd >= 121 && $dd <= 151){
        $mm = 5;
        $dd = $dd - 120;
    }else if($dd >= 152 && $dd <= 181){
        $mm = 6;
        $dd = $dd - 151;
    }else if($dd >= 182 && $dd <= 212){
        $mm = 7;
        $dd = $dd - 181;
    }else if($dd >= 213 && $dd <= 243){
        $mm = 8;
        $dd = $dd - 212;
    }else if($dd >= 244 && $dd <= 273){
        $mm = 9;
        $dd = $dd - 243;
    }else if($dd >= 274 && $dd <= 304){
        $mm = 10;
        $dd = $dd - 273;
    }else if($dd >= 305 && $dd <= 334){
        $mm = 11;
        $dd = $dd - 304;
    }else if($dd >= 335 && $dd <= 365){
        $mm = 12;
        $dd = $dd - 334;
    }else{
        $mm = "MM";
        //$dd = "DD";
    }

    if($dd <= 9 && $dd >= 1){
        $dd = "0" . $dd;
    }
    if($mm <= 9 && $mm >= 1){
        $mm = "0" . $mm;
    }

    return $mm . "/" . $dd . "/" . $year;

}

$input = "12/29/1951"; //input your date here
$parts = explode("/", $input);
$unix = mktime(0,0,0,$parts[0],$parts[1],$parts[2]);

echo "Input date is: " . $input;
echo "Unix convertion: " . $unix;
$convo = backdate($unix);
echo "The rebuilt time is: ". $convo;

I haven’t like crazy checked this out, but I did compare it against a db with over 200+ birthdays in it, and it appeared to be pretty accurate. Only flaw if any is the leap year adjustment.

Post to Twitter Post to Digg Post to Facebook Post to Ping.fm Post to StumbleUpon

Leave a Reply

Onys VSpy Plugin