Browse Source

min max datetime

Mark Scherer 9 years ago
parent
commit
5a22c3fc6d
2 changed files with 37 additions and 9 deletions
  1. 17 2
      src/Model/Table/Table.php
  2. 20 7
      tests/TestCase/Model/Table/TableTest.php

+ 17 - 2
src/Model/Table/Table.php

@@ -310,17 +310,32 @@ class Table extends ShimTable {
 				}
 				}
 			}
 			}
 
 
+			// We need this for those not using immutable objects just yet
+			$compareValue = clone $value;
+
 			if (!empty($options['after'])) {
 			if (!empty($options['after'])) {
-				$compare = $value->subSeconds($seconds);
+				$compare = $compareValue->subSeconds($seconds);
 				if ($options['after']->gt($compare)) {
 				if ($options['after']->gt($compare)) {
 					return false;
 					return false;
 				}
 				}
+				if (!empty($options['max'])) {
+					$after = $options['after']->addSeconds($options['max']);
+					if ($value->gt($after)) {
+						return false;
+					}
+				}
 			}
 			}
 			if (!empty($options['before'])) {
 			if (!empty($options['before'])) {
-				$compare = $value->addSeconds($seconds);
+				$compare = $compareValue->addSeconds($seconds);
 				if ($options['before']->lt($compare)) {
 				if ($options['before']->lt($compare)) {
 					return false;
 					return false;
 				}
 				}
+				if (!empty($options['max'])) {
+					$after = $options['before']->subSeconds($options['max']);
+					if ($value->lt($after)) {
+						return false;
+					}
+				}
 			}
 			}
 			return true;
 			return true;
 		}
 		}

+ 20 - 7
tests/TestCase/Model/Table/TableTest.php

@@ -323,43 +323,56 @@ class TableTest extends TestCase {
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-22 11:11:11')]];
 		$context = ['data' => ['after' => new Time('2010-02-22 11:11:11')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
-		//debug($res);
 		$this->assertTrue($res);
 		$this->assertTrue($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-24 11:11:11')]];
 		$context = ['data' => ['after' => new Time('2010-02-24 11:11:11')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
-		//debug($res);
 		$this->assertFalse($res);
 		$this->assertFalse($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
-		//debug($res);
 		$this->assertFalse($res);
 		$this->assertFalse($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'min' => 1], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'min' => 1], $context);
-		//debug($res);
 		$this->assertFalse($res);
 		$this->assertFalse($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:11')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'min' => 0], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'min' => 0], $context);
-		//debug($res);
 		$this->assertTrue($res);
 		$this->assertTrue($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:10')]];
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:10')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
-		//debug($res);
 		$this->assertTrue($res);
 		$this->assertTrue($res);
 
 
 		$date = new Time('2010-02-23 11:11:11');
 		$date = new Time('2010-02-23 11:11:11');
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:12')]];
 		$context = ['data' => ['after' => new Time('2010-02-23 11:11:12')]];
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
 		$res = $this->Users->validateDatetime($date, ['after' => 'after'], $context);
-		//debug($res);
+		$this->assertFalse($res);
+
+		$date = new Time('2010-02-24 11:11:11');
+		$context = ['data' => ['after' => new Time('2010-02-23 09:11:12')]];
+		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'max' => 2 * DAY], $context);
+		$this->assertTrue($res);
+
+		$date = new Time('2010-02-24 11:11:11');
+		$context = ['data' => ['after' => new Time('2010-02-23 09:11:12')]];
+		$res = $this->Users->validateDatetime($date, ['after' => 'after', 'max' => DAY], $context);
+		$this->assertFalse($res);
+
+		$date = new Time('2010-02-24 11:11:11');
+		$context = ['data' => ['before' => new Time('2010-02-25 13:11:12')]];
+		$res = $this->Users->validateDatetime($date, ['before' => 'before', 'max' => 2 * DAY], $context);
+		$this->assertTrue($res);
+
+		$date = new Time('2010-02-24 11:11:11');
+		$context = ['data' => ['before' => new Time('2010-02-25 13:11:12')]];
+		$res = $this->Users->validateDatetime($date, ['before' => 'before', 'max' => DAY], $context);
 		$this->assertFalse($res);
 		$this->assertFalse($res);
 	}
 	}