Array ( [settimer] => ) <?php 
    
// This powers t.lucb1e.com/5 minutes
    
    // Terminology:
    // multipart = notation like 3h5m (3 hours 5 minutes) or 3m (3 minutes)
    // token = space-separated part of the request, e.g. in "5 minutes" both "5" and "minutes" are tokens
    // multiplier = number based on the postfix (e.g. "minutes" has a multiplier of 60)
    // is_text = anything that is *only* text. Will return false if it contains digits.
    
    
if (strpos($_SERVER['REQUEST_URI'], '?source') === 1) {
        
highlight_file(__FILE__);
        exit;
    }
    
    
$debug false;
    
    
$uselesses = ['remind me that''remind me to''tell me to''tell me that''tell me''say'];
    
$_SERVER['REQUEST_URI'] = urldecode(substr($_SERVER['REQUEST_URI'], 1));
    
    if (empty(
$_SERVER['REQUEST_URI'])) {
        
$time 60 60 24 365.24// a year :D
    
}
    else {
        
$time 0;
    }
    
    foreach (
$uselesses as $useless) {
        if (
strpos($_SERVER['REQUEST_URI'], $useless) === 0) {
            
$_SERVER['REQUEST_URI'] = str_replace($useless ' '''$_SERVER['REQUEST_URI']);
        }
    }
    
    function 
is_text($token) {
        if (
is_int($token) || is_float($token)) {
            return 
false;
        }
        
        for (
$i 0$i strlen($token); $i++) {
            if (
is_numeric($token[$i])) {
                return 
false;
            }
        }
        return 
true;
    }
    
    function 
splitParts($token) {
        
$finishedNumericPart false;
        
$textPart '';
        
$numericPart '';
        for (
$i 0$i strlen($token); $i++) {
            if (!
$finishedNumericPart && is_numeric(($token[$i]))) {
                
$numericPart .= $token[$i];
            }
            else if (
is_numeric($token[$i])) {
                return [
"numericPart" => intval($numericPart), "textPart" => $textPart"remainder" => substr($token$i)];
            }
            else {
                
$finishedNumericPart true;
                
$textPart .= $token[$i];
            }
        }
        return [
"numericPart" => intval($numericPart), "textPart" => $textPart"remainder" => ''];
    }
    
    
$tokens explode(' '$_SERVER['REQUEST_URI']);
    
$alerttext '';
    
$hadNonText false;
    
$tokencount count($tokens);
    for (
$i 0$i $tokencount$i++) {
        
$token $tokens[$i];
        if (
is_text($token) && !$hadNonText) {
            if (
$debug) echo "ISTEXT($token)<br>\n";
            
$alerttext .= $token ' ';
        }
        else if (
is_numeric($token)) {
            if (
$debug) echo "ISNUMC($token)<br>\n";
            if (
$i == count($tokens) - 1) { // Last token
                
if (!$hadNonText) {
                    
$multiplier 60// default to minutes
                
}
                else {
                    if (
$debug) echo "hadNonText<br>\n";
                    
$multiplier 1;
                }
            }
            else {
                if (
$tokens[$i 1][0] == 'm') {
                    
$multiplier 60;
                }
                else if (
$tokens[$i 1][0] == 'h') {
                    
$multiplier 60 60;
                }
                else if (
$tokens[$i 1][0] == 'd') {
                    
$multiplier 60 60 24;
                }
                else {
                    
$multiplier 1;
                }
                if (
$debug) echo "NUM=!last, multiplier=$multiplier<br>\n";
                
$i++;
            }
            
$hadNonText true;
            
$time += floatval($token) * $multiplier;
        }
        else {
            
$hadNonText true;
            if (
$token == 'and') {
                continue; 
// ...yeah
            
}
            
            
$parts splitParts($token);
            if (!empty(
$parts["remainder"])) {
                
$tokens[$i] = $parts['remainder'];
                
$n 3;
            }
            else {
                
$n 2;
            }
            
$tokens[$i $n 1] = $parts["numericPart"];
            
$tokens[$i $n 2] = $parts["textPart"];
            if (
$debug) echo "MULTIPart($token) = $parts[numericPart],$parts[textPart],$parts[remainder]<br>\n";
            
$i -= $n;
        }
        if (
$asdf++ > 300) {
            exit;
        }
    }
    
    if (empty(
$alerttext)) {
        
$alerttext 'Time expired!';
    }
    else if (
substr($alerttextstrlen($alerttext) - 4) == ' in ') {
        
$alerttext substr($alerttext0strlen($alerttext) - 4);
    }
?>
<script>
    setTimeout(function() {
        alert("<?php echo htmlspecialchars($alerttext);?>");
    }, 1000 * <?php echo $time?>);
</script>

I'll alert "<?php echo htmlspecialchars($alerttext); ?>" in <?php echo $time?> seconds.<br><br>

Warning: there is no sound or flashing image yet. Also todo: live countdown (show how much time is remaining).<br><br>

Accepted formats:<br>
t.lucb1e.com/tell me the eggs boil in 5 minutes and 30 seconds (5 minutes 30 seconds)<br>
t.lucb1e.com/the eggs boil in 5 minutes and 30 seconds (5 minutes 30 seconds)<br>
t.lucb1e.com/the eggs boil 5 minutes and 30 seconds (5 minutes 30 seconds)<br>
t.lucb1e.com/tell me the eggs boil in 5m30s (5 minutes 30 seconds)<br>
t.lucb1e.com/5m30s (5 minutes 30 seconds)<br>
t.lucb1e.com/5m (5 minutes)<br>
t.lucb1e.com/5 (5 minutes)<br>
t.lucb1e.com/1 hour (1 hour)<br>
t.lucb1e.com/1h (1 hour)<br>
t.lucb1e.com/5 days (5 days)<br>
t.lucb1e.com/5d (5 days)<br>
<br>
Source code at <a href="http://t.lucb1e.com/?source">?source</a>