--- /dev/null
+<?php
+class Horde_Date_Repeater_Fortnight extends Horde_Date_Repeater
+{
+ // (14 * 24 * 60 * 60)
+ const FORTNIGHT_SECONDS = 1209600;
+
+ public $currentFortnightStart;
+
+ public function next($pointer)
+ {
+ parent::next($pointer);
+
+ if (!$this->currentFortnightStart) {
+ switch ($pointer) {
+ case 'future':
+ $sundayRepeater = new Horde_Date_Repeater_DayName('sunday');
+ $sundayRepeater->now = $this->now;
+ $nextSundaySpan = $sundayRepeater->next('future');
+ $this->currentFortnightStart = $nextSundaySpan->begin;
+ break;
+
+ case 'past':
+ $sundayRepeater = new Horde_Date_Repeater_DayName('sunday');
+ $sundayRepeater->now = clone $this->now;
+ $sundayRepeater->now->day++;
+ $sundayRepeater->next('past');
+ $sundayRepeater->next('past');
+ $lastSundaySpan = $sundayRepeater->next('past');
+ $this->currentFortnightStart = $lastSundaySpan->begin;
+ break;
+ }
+ } else {
+ $direction = ($pointer == 'future') ? 1 : -1;
+ $this->currentFortnightStart->add($direction * self::FORTNIGHT_SECONDS);
+ }
+
+ return new Horde_Date_Span($this->currentFortnightStart, $this->currentFortnightStart->add(self::FORTNIGHT_SECONDS));
+ }
+
+ public function this($pointer = 'future')
+ {
+ parent::this($pointer);
+
+ switch ($pointer) {
+ case 'future':
+ case 'none':
+ $thisFortnightStart = new Horde_Date(array('year' => $this->now->year, 'month' => $this->now->month, 'day' => $this->now->day, 'hour' => $this->now->hour + 1));
+ $sundayRepeater = new Horde_Date_Repeater_DayName('sunday');
+ $sundayRepeater->now = $this->now;
+ $sundayRepeater->this('future');
+ $thisSundaySpan = $sundayRepeater->this('future');
+ $thisFortnightEnd = $thisSundaySpan->begin;
+ return new Horde_Date_Span($thisFortnightStart, $thisFortnightEnd);
+
+ case 'past':
+ $thisFortnightEnd = new Horde_Date(array('year' => $this->now->year, 'month' => $this->now->month, 'day' => $this->now->day, 'hour' => $this->now->hour));
+ $sundayRepeater = new Horde_Date_Repeater_DayName('sunday');
+ $sundayRepeater->now = $this->now;
+ $lastSundaySpan = $sundayRepeater->next('past');
+ $thisFortnightStart = $lastSundaySpan->begin;
+ return new Horde_Date_Span($thisFortnightStart, $thisFortnightEnd);
+ }
+ }
+
+ public function offset($span, $amount, $pointer)
+ {
+ $direction = ($pointer == 'future') ? 1 : -1;
+ return $span->add($direction * $amount * self::FORTNIGHT_SECONDS);
+ }
+
+ public function width()
+ {
+ return self::FORTNIGHT_SECONDS;
+ }
+
+ public function __toString()
+ {
+ return parent::__toString() . '-fortnight';
+ }
+
+}
public function testParseGuess_g_r_Fortnight()
{
- $this->fail("No support for fortnights currently");
$time = $this->parser->parse("this fortnight");
$this->assertEquals(new Horde_Date(2006, 8, 21, 19, 30), $time);
$this->assertEquals(new Horde_Date(2006, 7, 16, 14), $time);
$time = $this->parser->parse("1 fortnight ago");
- $this->markTestSkipped('Fortnights are not yet supported');
$this->assertEquals(new Horde_Date(2006, 8, 2, 14), $time);
$time = $this->parser->parse("2 fortnights ago");
- $this->markTestSkipped('Fortnights are not yet supported');
$this->assertEquals(new Horde_Date(2006, 7, 19, 14), $time);
$time = $this->parser->parse("3 weeks ago");
$time = $this->parser->parse("20 seconds before now");
$this->assertEquals(new Horde_Date(2006, 8, 16, 13, 59, 40), $time);
- $time = $this->parser->parse("1 monday ago");
$this->markTestSkipped('not yet supported');
+ $time = $this->parser->parse("1 monday ago");
$this->assertEquals(new Horde_Date(2006, 8, 14, 12), $time);
}
$this->assertEquals(new Horde_Date(2007, 2, 16, 14), $time);
$time = $this->parser->parse("3 fortnights hence");
- $this->markTestSkipped('Fortnights are not yet supported');
$this->assertEquals(new Horde_Date(2006, 9, 27, 14), $time);
$time = $this->parser->parse("1 week from now");