| 1 | <?php |
| 2 | /* |
| 3 | * Smarty plugin |
| 4 | * ------------------------------------------------------------- |
| 5 | * Type: function |
| 6 | * Name: date_diff |
| 7 | * Version: 2.0 |
| 8 | * Date: June 22, 2008 |
| 9 | * Author: Matt DeKok |
| 10 | * Purpose: factor difference between two dates in days, weeks, |
| 11 | * or years |
| 12 | * Input: date1 = "mm/dd/yyyy" or "yyyy/mm/dd" or "yyyy-mm-dd" |
| 13 | * date2 = "mm/dd/yyyy" or "yyyy/mm/dd" or "yyyy-mm-dd" or $smarty.now |
| 14 | * assign = name of variable to assign difference to |
| 15 | * interval = "days" (default), "weeks", "years" |
| 16 | * Examples: {date_diff date1="5/12/2003" date2=$smarty.now interval="weeks"} |
| 17 | * {date_diff date1="5/12/2003" date2="5/10/2008" assign="diff"}{$diff} |
| 18 | * ------------------------------------------------------------- |
| 19 | */ |
| 20 | function smarty_function_date_diff($params, &$smarty) { |
| 21 | $date1 = mktime(0,0,0,1,1,2000); |
| 22 | $date2 = mktime(0,0,0,date("m"),date("d"),date("Y")); |
| 23 | $assign = null; |
| 24 | $interval = "days"; |
| 25 | |
| 26 | extract($params); |
| 27 | |
| 28 | $i = 1/60/60/24; |
| 29 | if($interval == "weeks") { |
| 30 | $i = $i/7; |
| 31 | } elseif($interval == "years") { |
| 32 | $i = $i/365.25; |
| 33 | } |
| 34 | |
| 35 | $date1 = ((is_string($date1))?strtotime($date1):$date1); |
| 36 | $date2 = ((is_string($date2))?strtotime($date2):$date2); |
| 37 | |
| 38 | if($assign != null) { |
| 39 | $smarty->assign($assign,floor(($date2 - $date1)*$i)); |
| 40 | } else { |
| 41 | return floor(($date2 - $date1)*$i); |
| 42 | } |
| 43 | } |
| 44 | ?> |