Usage:
Code: Select all
// a "happy" input
$range = new Ne8Vehicle_Year_Range('2000-01');
$range->isValid(); // true
$range->start(); // 2000
$range->end(); // 2001
// a "happy input"
$range = new Ne8Vehicle_Year_Range('2000-foo');
$range->isValid(); // true
$range->startYear()->isValid(); // true
$range->endYear()->isValid(); // false
$range->start(); // 2000
$range->end(); // 2000
// a "happy input"
$range = new Ne8Vehicle_Year_Range('2000');
$range->isValid(); // true
$range->start(); // 2000
$range->end(); // 2000
// a "happy input"
$range = new Ne8Vehicle_Year_Range('00');
$range->isValid(); // true
$range->start(); // 2000
$range->end(); // 2000
// a "sad input"
$range = new Ne8Vehicle_Year_Range('bar-foo');
$range->isValid(); // false
$range->start(); // Exception
// a "sad input"
$range = new Ne8Vehicle_Year_Range('23492934');
$range->isValid(); // false
$range->start(); // Exception
// a "sad input"
$range = new Ne8Vehicle_Year_Range('444');
$range->isValid(); // false
$range->start(); // Exception
Unit tests & source code are attached.
PS > It simply compare a 2 digit year to a constant, 25. If it is greater, it assumes 20th century, otherwise 21st century. This is documented in the unit tests. Maybe another idea to expand this would be different heuristics for guessing the correct century.
Update - Century threshold is now adjustable:
Code: Select all
$year->setThreshold(5);
$range->setThreshold(5);
Code: Select all
$year->setY2kMode(false);