X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FDate.php;h=55cbbe9340ab1c82d08a0654bb29bd15c6f7b28a;hb=3770b22aa5f8670964ffdef8b33b4ad1af3da599;hp=3c377a6cfc05e1ea11bfa3633cb47fa460d30f10;hpb=d5f6077993b1df66a934933af0bc9327cff13e78;p=civicrm-core.git diff --git a/CRM/Utils/Date.php b/CRM/Utils/Date.php index 3c377a6cfc..55cbbe9340 100644 --- a/CRM/Utils/Date.php +++ b/CRM/Utils/Date.php @@ -250,6 +250,11 @@ class CRM_Utils_Date { return $fullMonthNames; } + /** + * @param $string + * + * @return int + */ static function unixTime($string) { if (empty($string)) { return 0; @@ -283,7 +288,7 @@ class CRM_Utils_Date { * %P - uppercase ante/post meridiem ('AM', 'PM') * %Y - year as a decimal number including the century ('2005') * - * @param $dateString + * @param string $dateString * @param string $format the output format * @param array $dateParts an array with the desired date parts * @@ -458,6 +463,9 @@ class CRM_Utils_Date { /** * converts the date/datetime from ISO format to MySQL format + * Note that until CRM-14986/ 4.4.7 this was required whenever the pattern $dao->find(TRUE): $dao->save(); was + * used to update an object with a date field was used. The DAO now checks for a '-' in date field strings + * & runs this function if the - appears - meaning it is likely redundant in the form & BAO layers * * @param string $iso date/datetime in ISO format * @@ -656,6 +664,11 @@ class CRM_Utils_Date { return FALSE; } + /** + * @param $date + * + * @return bool + */ static function isDate(&$date) { if (CRM_Utils_System::isNull($date)) { return FALSE; @@ -663,10 +676,21 @@ class CRM_Utils_Date { return TRUE; } + /** + * @param null $timeStamp + * + * @return bool|string + */ static function currentDBDate($timeStamp = NULL) { return $timeStamp ? date('YmdHis', $timeStamp) : date('YmdHis'); } + /** + * @param $date + * @param null $now + * + * @return bool + */ static function overdue($date, $now = NULL) { $mysqlDate = self::isoToMysql($date); if (!$now) { @@ -977,6 +1001,13 @@ class CRM_Utils_Date { unset($to); break; + case 'greater_previous': + $from['d'] = 31; + $from['M'] = 12; + $from['Y'] = $now['year'] - 1; + unset($to); + break; + case 'ending': $to['d'] = $now['mday']; $to['M'] = $now['mon']; @@ -1016,6 +1047,29 @@ class CRM_Utils_Date { $from = self::intervalAdd('year', -3, $to); $from = self::intervalAdd('second', 1, $from); break; + + case 'less': + $to['d'] = 31; + $to['M'] = 12; + $to['Y'] = $now['year']; + unset($from); + break; + + case 'next': + $from['M'] = $from['d'] = 1; + $to['d'] = 31; + $to['M'] = 12; + $to['Y'] = $from['Y'] = $now['year'] + 1; + break; + + case 'starting': + $from['d'] = $now['mday']; + $from['M'] = $now['mon']; + $from['Y'] = $now['year']; + $to['d'] = $now['mday'] - 1; + $to['M'] = $now['mon']; + $to['Y'] = $now['year'] + 1; + break; } break; @@ -1039,7 +1093,15 @@ class CRM_Utils_Date { $from['Y'] = $fYear - 1; $fiscalYear = mktime(0, 0, 0, $from['M'], $form['d'], $from['Y'] + 1); $fiscalEnd = explode('-', date("Y-m-d", $fiscalYear)); + $to['d'] = $fiscalEnd['2']; + $to['M'] = $fiscalEnd['1']; + $to['Y'] = $fiscalEnd['0']; + break; + case 'next': + $from['Y'] = $fYear + 1; + $fiscalYear = mktime(0, 0, 0, $from['M'], $from['d'], $from['Y'] + 1); + $fiscalEnd = explode('-', date("Y-m-d", $fiscalYear)); $to['d'] = $fiscalEnd['2']; $to['M'] = $fiscalEnd['1']; $to['Y'] = $fiscalEnd['0']; @@ -1079,6 +1141,7 @@ class CRM_Utils_Date { $difference = 2; $quarter = ceil($now['mon'] / 3); $quarter = $quarter - $difference; + $subtractYear = 0; if ($quarter <= 0) { $subtractYear = 1; $quarter += 4; @@ -1129,6 +1192,7 @@ class CRM_Utils_Date { case 'earlier': $quarter = ceil($now['mon'] / 3) - 1; + $subtractYear = 0; if ($quarter <= 0) { $subtractYear = 1; $quarter += 4; @@ -1147,6 +1211,19 @@ class CRM_Utils_Date { unset($to); break; + case 'greater_previous': + $quarter = ceil($now['mon'] / 3) - 1; + $subtractYear = 0; + if ($quarter <= 0) { + $subtractYear = 1; + $quarter += 4; + } + $from['M'] = 3 * $quarter; + $from['Y'] = $from['Y'] = $now['year'] - $subtractYear; + $from['d'] = date('t', mktime(0, 0, 0, $from['M'], 1, $from['Y'])); + unset($to); + break; + case 'ending': $to['d'] = $now['mday']; $to['M'] = $now['mon']; @@ -1168,6 +1245,35 @@ class CRM_Utils_Date { $to['H'] = 23; $to['i'] = $to['s'] = 59; break; + + case 'less': + $quarter = ceil($now['mon'] / 3); + $to['M'] = 3 * $quarter; + $to['Y'] = $now['year']; + $to['d'] = date('t', mktime(0, 0, 0, $to['M'], 1, $now['year'])); + unset($from); + break; + + case 'next': + $difference = -1; + $subtractYear = 0; + $quarter = ceil($now['mon'] / 3); + $quarter = $quarter - $difference; + //CRM-14550 QA Fix + if($quarter > 4) { + $now['year'] = $now['year'] + 1; + $quarter = 1; + } + if ($quarter <= 0) { + $subtractYear = 1; + $quarter += 4; + } + $from['d'] = 1; + $from['M'] = (3 * $quarter) - 2; + $to['M'] = 3 * $quarter; + $to['Y'] = $from['Y'] = $now['year'] - $subtractYear; + $to['d'] = date('t', mktime(0, 0, 0, $to['M'], 1, $to['Y'])); + break; } break; @@ -1251,6 +1357,21 @@ class CRM_Utils_Date { unset($to); break; + case 'greater_previous': + //from end of past month + if ($now['mon'] == 1) { + $from['M'] = 12; + $from['Y'] = $now['year'] - 1; + } + else { + $from['M'] = $now['mon'] - 1; + $from['Y'] = $now['year']; + } + + $from['d'] = date('t', mktime(0, 0, 0, $from['M'], 1, $from['Y'])); + unset($to); + break; + case 'ending': $to['d'] = $now['mday']; $to['M'] = $now['mon']; @@ -1271,6 +1392,37 @@ class CRM_Utils_Date { $to['H'] = 23; $to['i'] = $to['s'] = 59; break; + + case 'less': + //CRM-14550 QA Fix + $to['Y'] = $now['year']; + $to['M'] = $now['mon']; + $to['d'] = date('t', mktime(0, 0, 0, $now['mon'], 1, $now['year'])); + unset($from); + break; + + case 'next': + $from['d'] = 1; + if ($now['mon'] == 12) { + $from['M'] = $to['M'] = 1; + $from['Y'] = $to['Y'] = $now['year'] + 1; + } + else { + $from['M'] = $to['M'] = $now['mon'] + 1; + $from['Y'] = $to['Y'] = $now['year']; + } + $to['d'] = date('t', mktime(0, 0, 0, $to['M'], 1, $to['Y'])); + break; + + case 'starting': + $from['d'] = $now['mday']; + $from['M'] = $now['mon']; + $from['Y'] = $now['year']; + $from['H'] = 00; + $from['i'] = $to['s'] = 00; + $to = self::intervalAdd('month', +1, $from); + $to = self::intervalAdd('second',-1, $to); + break; } break; @@ -1324,6 +1476,14 @@ class CRM_Utils_Date { unset($to); break; + case 'greater_previous': + $from['d'] = $now['mday']; + $from['M'] = $now['mon']; + $from['Y'] = $now['year']; + $from = self::intervalAdd('day', -1 * ($now['wday']) - 1, $from); + unset($to); + break; + case 'ending': $to['d'] = $now['mday']; $to['M'] = $now['mon']; @@ -1345,6 +1505,33 @@ class CRM_Utils_Date { $to['H'] = 23; $to['i'] = $to['s'] = 59; break; + + case 'less': + $to['d'] = $now['mday']; + $to['M'] = $now['mon']; + $to['Y'] = $now['year']; + //CRM-14550 QA Fix + $to = self::intervalAdd('day', -1 * ($now['wday']) + 6, $to); + unset($from); + break; + + case 'next': + $from['d'] = $now['mday']; + $from['M'] = $now['mon']; + $from['Y'] = $now['year']; + $from = self::intervalAdd('day', -1 * ($now['wday']) + 7, $from); + $to = self::intervalAdd('day', +6, $from); + break; + + case 'starting': + $from['d'] = $now['mday']; + $from['M'] = $now['mon']; + $from['Y'] = $now['year']; + $from['H'] = 00; + $from['i'] = $to['s'] = 00; + $to = self::intervalAdd('day', +7, $from); + $to = self::intervalAdd('second', -1, $to); + break; } break; @@ -1397,6 +1584,17 @@ class CRM_Utils_Date { $from['Y'] = $now['year']; unset($to); break; + + case 'starting': + $to['d'] = $now['mday']; + $to['M'] = $now['mon']; + $to['Y'] = $now['year']; + $to = self::intervalAdd('day', +1, $to); + $from['d'] = $to['d']; + $from['M'] = $to['M']; + $from['Y'] = $to['Y']; + break; + } break; } @@ -1580,6 +1778,12 @@ class CRM_Utils_Date { } + /** + * @param $date + * @param $dateType + * + * @return null|string + */ static function formatDate($date, $dateType) { $formattedDate = NULL; if (empty($date)) {