All pastes #814488 Raw Edit

Someone

public text v1 · immutable
·published 2007-12-13 10:37 UTC
rendered paste body
  elsif ($cmd eq "gmt") {
      my $time = $args->[0];
      if (!($time)) {
        msgout($kernel, $chan, "Current time: " . scalar(gmtime()) . " GMT.");
      }
      else {
        my ($posixtime, $extra, $error) = &parse_whole_date($time);
        if (defined($posixtime)) {
          my $firstpart = $time;
          $firstpart=~s/ *\Q$extra\E$//;
          my $noparse = "";
          if ($extra) { $noparse = " (couldn't parse: '$extra')"; }
          msgout($kernel, $chan, "'${firstpart}'${noparse} == " . scalar(gmtime($posixtime)) . " GMT.");
        }
        else {
          msgout($kernel, $chan, "Sorry, I couldn't parse that.");
        }
      }
  }

# [...]

sub parse_whole_date {
  my ($remaining, $seconds) = @_;
  if (!(defined($seconds))) { $seconds = time(); }
  my ($orig_rem, $orig_sec) = ($remaining, $seconds);
  my ($real_seconds, $message);
  my ($in_seen, $at_seen, $on_seen) = (0, 0, 0);
  while (defined($seconds)) {
    $real_seconds = $seconds;
    $message = $remaining;
    my $orig_message = $message;
    $message =~ s/^at // unless ($at_seen);
    $message =~ s/^in // unless ($in_seen);
    $message =~ s/^on // unless ($on_seen);
    my %options = (
      NOW           => $seconds,
      FUZZY         => 1,
      PREFER_FUTURE => 1,
    );
    ($seconds, $remaining) = parsedate($message, %options);
    if (defined($seconds)) {
      my $pos = index($orig_message, $remaining);
      my $parsed = substr($orig_message, 0, $pos);
#      if ($parsed =~ m/(^| )in /) { $in_seen = 1; }
#      if ($parsed =~ m/(^| )at /) { $at_seen = 1; }
      if ($parsed =~ m/^in\b/) { $in_seen = 1; }
      if ($parsed =~ m/^at\b/) { $at_seen = 1; }
      if ($parsed =~ m/^on\b/) { $on_seen = 1; }
      # ADD ME
      if ($pos == 0) { return ($real_seconds,$orig_message,$remaining); }
      # END SNIP
      if ($parsed =~ m/ in $/) { $remaining = "in $remaining"; }
      if ($parsed =~ m/ at $/) { $remaining = "at $remaining"; }
      if ($parsed =~ m/ on $/) { $remaining = "on $remaining"; }
    }
    $message = $orig_message;
                         }
  if (($orig_rem eq $message)      ||
      ($real_seconds == $orig_sec) ||
      ($real_seconds < 0)) {
    return (undef, $message, $remaining);
  } else {
    return ($real_seconds, $message, $remaining);
  }
}