Often, when working with dates, data are incomplete. For instance, one might know that a person is born in 1980, or in April, 1980, but not on which day exactly.
I call these dates fuzzy dates. yii2-fuzzydate consists of a few classes to work with them.
Fuzzy date representation ¶
In the database ¶
In the database each fuzzy date is represented by two 'normal' dates. The field names of the two dates is derived from the attribute name of the fuzzy date, by appending
So, if the attribute name of the fuzzy date is
'born', the fields representing is in the database would be
- If we know the date exactly, the value of both date fields is equal.
- If we know the date with a 'granularity' of one month, the value of the first field is the first day of the month, the value of the second field is the last day of the month.
- If we only know the year, the value of the first field is the first day of the year, the value of the second field is the last day of the year.
In other words, given a fuzzy date
'xyz', the range of possible 'real' dates is given by
For instance, the exact date of December 3, 2008 (the day Yii was launched, by the way) would be represented by (assuming MySQL format):
$born1 = "2008-12-03"; $born2 = "2008-12-03";
If the date was December, 2008, we would have:
$born1 = "2008-12-01"; $born2 = "2008-12-31";
And, lastly, if the date was 2008:
$born1 = "2008-01-01"; $born2 = "2008-12-31";
In PHP ¶
In PHP, a fuzzy date is represented by a three member array, where the unknown values are set to
null. Like so:
// December 3, 2008 $born = [ 'y' => 2008, 'm' => 12, 'd' => 3 ]; // December, 2008 $born = [ 'y' => 2008, 'm' => 12, 'd' => null ]; // 2008 $born = [ 'y' => 2008, 'm' => null, 'd' => null ];