That's interesting, Zend_Date#isLater() is supposed to return a boolean. I
just confirmed this with a quick unit test:

public function testZendDateIsLaterReturnsBoolean()
{
  $date1 = new Zend_Date();
  $date2 = new Zend_Date();
  $result = $date1->isLater($date2);
  $this->assertTrue(is_bool($result));
}

Is that maybe a var_dump of something else? Looks like a dump of $context.

--
Hector


On Wed, Dec 30, 2009 at 1:32 PM, Jigal sanders <[email protected]>wrote:

> Hi Hector,
>
> I knew all the time there was something wrong in the addValidator function
> but didn't know what. This works indeed better.
>
> Now I have this function:
>
>
>     public function isValid($value, $context = null){
>         $date = new Zend_Date($value,'dd-MM-YYYY');
>         $this->_setValue($value);
>
>         $error = false;
>         //var_dump($this->_fieldsToCompare);
>         //exit;
>
>         foreach($this->_fieldsToCompare as $fieldName){
>             if(!isset($context[$fieldName])){
>                 $error = true;
>                 $this->_error(self::MSG_DATEBEFORE);
>                 break;
>             }
>             $date2 = new Zend_Date($context[$fieldName],'dd-MM-YYYY');
>             $result = $date2->isLater($date);
>             echo $result;
>         }
>         return !$error;
>     }
>
> but the $result dumps the whole object:
>
> array(8) { ["evt_name"]=> string(9) "bladiebla" ["evt_description"]=>
> string(0) "" ["adr_id"]=> string(1) "3" ["evt_startdate"]=> string(10)
> "20-12-2009" ["evt_enddate"]=> string(10) "30-12-2009" ["evt_starttime"]=>
> string(0) "" ["evt_endtime"]=> string(0) "" ["evt_amtpersons"]=> string(0)
> "" }
>
> But I only want a true or false.
>
>
>
> On Wed, Dec 30, 2009 at 10:20 PM, Hector Virgen <[email protected]>wrote:
>
>> I think instead you want to pass in the field name (as a string) that you
>> want to compare to:
>>
>> $evtEndDate->addValidator('CompareDates',false,array<http://www.php.net/array>
>> ('evt_enddate'));
>>
>> Then, in your validator class, you can easily extract the comparison date
>> from the $context array. Once you have that value, create a Zend_Date object
>> from it and compare it to the Zend_Date object created with $value.
>>
>> I hope this helps :)
>>
>> --
>> Hector
>>
>>
>>
>> On Wed, Dec 30, 2009 at 1:15 PM, Jigal sanders <[email protected]>wrote:
>>
>>> And as i thought I am already in trouble:
>>> See comments in the code below.
>>>
>>> public function isValid($value, $context = null){
>>>         $date = new Zend_Date($value,'dd-MM-YYYY');
>>>         $this->_setValue($value);
>>>
>>>         $error = false;
>>>        var_dump($this->_fieldsToCompare);
>>>       //this dump shows me the acutal text box in the form with the date
>>> in it and the label and so on.
>>>         foreach($this->_fieldsToCompare as $fieldName){
>>>             echo $context[$fieldName];
>>>             //this echo is empty.
>>>             if(!isset($context[$fieldName]) || $value !==
>>> $context[$fieldName]){
>>>                 $error = true;
>>>                 $this->_error(self::MSG_DATEBEFORE);
>>>                 break;
>>>             }
>>>         }
>>>         return !$error;
>>>     }
>>>
>>> What i need is the value of the startDate which i have given in my
>>> addValidator function :$evtEndDate->addValidator('CompareDates',false,
>>> array <http://www.php.net/array>($evtStartDate)); and then convert it to
>>> a date object in order to be able to compate dates with the isEarlier
>>> function.
>>> How can i do this?
>>>
>>>
>>> On Wed, Dec 30, 2009 at 10:04 PM, Jigal sanders 
>>> <[email protected]>wrote:
>>>
>>>> figured it out , i think.
>>>> I changed my construct function to:
>>>>
>>>> public function __construct($fieldsToCompare =array()){
>>>>         if(is_array($fieldsToCompare)){
>>>>             foreach($fieldsToCompare as $field){
>>>>                 echo $field;
>>>>                 exit;
>>>>                 $this->_fieldsToCompare[] = $field;
>>>>             }
>>>>         }else{
>>>>                 $this->_fieldsToCompare[] = (string)$fieldsToCompare;
>>>>         }
>>>>
>>>>
>>>>     }
>>>>
>>>> No i have to see in my further code if i can use it since i need to make
>>>> it to a zend_date object later on in my isValid function.
>>>>
>>>>
>>>> On Wed, Dec 30, 2009 at 10:02 PM, Hector Virgen <[email protected]>wrote:
>>>>
>>>>> What is the value of $evtStartDate before calling addValidator()?
>>>>>
>>>>> --
>>>>> Hector
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Dec 30, 2009 at 12:48 PM, Jigal sanders <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> sorry to disturb but i really don't get it working.
>>>>>> It starts already that in the constructor the $_fieldsToCompare array
>>>>>> stays empty. While this is the way i instantiate the validator:
>>>>>>
>>>>>> $evtEndDate->addValidator('CompareDates',false,array<http://www.php.net/array>
>>>>>> ($evtStartDate));
>>>>>>
>>>>>> this is the full code
>>>>>>
>>>>>> http://pastebin.com/f5f36971f
>>>>>>
>>>>>>
>>>>>> On Wed, Dec 30, 2009 at 7:46 PM, Hector Virgen <[email protected]>wrote:
>>>>>>
>>>>>>> You might want to look at the Zend_Date documentation for comparing
>>>>>>> dates.
>>>>>>>
>>>>>>>
>>>>>>> http://framework.zend.com/manual/en/zend.date.overview.html#zend.date.others.comparison
>>>>>>>
>>>>>>>
>>>>>>> <http://framework.zend.com/manual/en/zend.date.overview.html#zend.date.others.comparison>You
>>>>>>> can hint to your validator (perhaps with another constructor argument) 
>>>>>>> as to
>>>>>>> how to compare the dates... should A be before B, or after B, or equal 
>>>>>>> to B?
>>>>>>>
>>>>>>> --
>>>>>>> Hector
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Dec 30, 2009 at 10:42 AM, Jigal sanders <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Hello Hector,
>>>>>>>>
>>>>>>>> I already removed the validator by one of the date fields.
>>>>>>>> Now the problem is on how to compare the dates. I created date
>>>>>>>> objects from all the date fields within the validator. But I don't 
>>>>>>>> know how
>>>>>>>> to do the last part (i.e comparing the dates.) I converted the field 
>>>>>>>> values
>>>>>>>> to zend_date objects. But when I print the date object to the screen i 
>>>>>>>> get:
>>>>>>>>
>>>>>>>> array(1) { [0]=> object(Zend_Date)#109 (8) { ["_locale:private"]=>
>>>>>>>> string(5) "en_US" ["_fractional:private"]=> int(0) 
>>>>>>>> ["_precision:private"]=>
>>>>>>>> int(3) ["_unixTimestamp:private"]=> string(10) "1262127600"
>>>>>>>> ["_timezone:private"]=> string(16) "Europe/Amsterdam" 
>>>>>>>> ["_offset:private"]=>
>>>>>>>> int(-3600) ["_syncronised:private"]=> int(0) ["_dst:protected"]=> 
>>>>>>>> bool(true)
>>>>>>>> } }
>>>>>>>>
>>>>>>>>  See here the updated code:
>>>>>>>> http://pastebin.com/m6cb13d9d
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Dec 30, 2009 at 6:19 PM, Hector Virgen 
>>>>>>>> <[email protected]>wrote:
>>>>>>>>
>>>>>>>>> It looks like you're adding the custom compareDates validator to
>>>>>>>>> both date elements. It might be easier to just put it in one.
>>>>>>>>>
>>>>>>>>> If you can determine that $a < $b, then you already know that $b >
>>>>>>>>> $a.
>>>>>>>>>
>>>>>>>>> Also, in the $evtStartDate element, you are setting the field to
>>>>>>>>> compare to $evtEndDate, which hasn't been created yet. Instead of 
>>>>>>>>> passing in
>>>>>>>>> the element, try passing in the element's field name "evt_enddate" 
>>>>>>>>> (as a
>>>>>>>>> string).
>>>>>>>>>
>>>>>>>>> I hope this helps.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Hector
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Dec 30, 2009 at 5:16 AM, Jigal sanders <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Hello everyone,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I have a form with two date fields. One startdate and one enddate.
>>>>>>>>>> I want to make sure, the end date is not before the startdate.
>>>>>>>>>> I am trying to create my own validator. Now i based my validator
>>>>>>>>>> on this tutorial:
>>>>>>>>>> http://cogo.wordpress.com/2008/04/16/custom-validators-for-zend_form_element/
>>>>>>>>>> Here is my code: http://pastebin.com/f20aafd32  it's not yet
>>>>>>>>>> ready.
>>>>>>>>>> My problem is at line 52 where the value of  $this
>>>>>>>>>> ->_fieldsToCompare is empty all the time.
>>>>>>>>>> I also have problems in comparing the dates.
>>>>>>>>>>
>>>>>>>>>> Kan someone please help me along?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> <http://cogo.wordpress.com/2008/04/16/custom-validators-for-zend_form_element/>
>>>>>>>>>>
>>>>>>>>>> Kind regards,
>>>>>>>>>>
>>>>>>>>>> J. Sanders
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Met vriendelijke groet,
>>>>>>>>
>>>>>>>> Jigal Sanders
>>>>>>>> A.J. Ernststraat 739
>>>>>>>> 1082 LK Amsterdam
>>>>>>>> Mobiel: 06-42111489
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Met vriendelijke groet,
>>>>>>
>>>>>> Jigal Sanders
>>>>>> A.J. Ernststraat 739
>>>>>> 1082 LK Amsterdam
>>>>>> Mobiel: 06-42111489
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Met vriendelijke groet,
>>>>
>>>> Jigal Sanders
>>>> A.J. Ernststraat 739
>>>> 1082 LK Amsterdam
>>>> Mobiel: 06-42111489
>>>>
>>>
>>>
>>>
>>> --
>>> Met vriendelijke groet,
>>>
>>> Jigal Sanders
>>> A.J. Ernststraat 739
>>> 1082 LK Amsterdam
>>> Mobiel: 06-42111489
>>>
>>
>>
>
>
> --
> Met vriendelijke groet,
>
> Jigal Sanders
> A.J. Ernststraat 739
> 1082 LK Amsterdam
> Mobiel: 06-42111489
>

Reply via email to