/**
  *  This function counts visits of a object
  *
  *  @param $id       Object id (content_id)
  *  @param $user_id  (Optional) User id (0 means visitors)
  *  @param $period   (Optional) Period for count. Valid values: 'week', 'month', year'
  *
  *  @returns    an array of labels => values
  */
 function getObjectVisits($id, $user_id = 0, $period = 'week')
 {
     YDInclude('YDDate.php');
     // compute start date
     $date = new YDDate();
     $labels = array();
     if ($period == 'week') {
         for ($i = 0; $i < 7; $i++) {
             $labels[] = $date->getDayName();
             $date->addDay(-1);
         }
     }
     if ($period == 'month') {
         for ($i = 0; $i < 4; $i++) {
             $labels[] = $date->getMonthName();
             $date->addMonth(-1);
         }
     }
     if ($period == 'year') {
         for ($i = 0; $i < 3; $i++) {
             $labels[] = $date->getYear();
             $date->addYear(-1);
         }
     }
     $labels = array_reverse($labels);
     $this->resetAll();
     $this->user_id = intval($user_id);
 }
 function result($currentdate, $operation, $number, $type)
 {
     // create date object with timestamp from the 'currentdate' form element
     $date = new YDDate();
     $date->set(intval($currentdate));
     // if operation is 1 we want subtract the number
     if ($operation == 1) {
         $number = -intval($number);
     } else {
         $number = intval($number);
     }
     // add number to date
     switch (intval($type)) {
         case 0:
             $date->addMinute($number);
             break;
         case 1:
             $date->addDay($number);
             break;
         case 2:
             $date->addMonth($number);
             break;
         default:
             $date->addYear($number);
     }
     // assign span with date
     $this->ajax->addResult('myspanresult', YDStringUtil::formatDate($date->getTimestamp(), 'datetime'));
     // return response to client browser
     return $this->ajax->processResults();
 }
 function actionDefault()
 {
     YDDebugUtil::dump(YDDate::now(), 'YDDate::now()');
     YDDebugUtil::dump(YDDate::nowCustom("%d"), 'YDDate::nowCustom( "%d" )');
     YDDebugUtil::dump(YDDate::nowCustom("%d %B %Y"), 'YDDate::nowCustom( "%d %B %Y" )');
     // Static validation
     YDDebugUtil::dump(YDDate::get("HUM", time()), 'YDDate::get( "HUM", time() )');
     YDDebugUtil::dump(YDDate::get("EUN_DATE", time()), 'YDDate::get( "EUN_DATE", time() )');
     YDDebugUtil::dump(YDDate::get("HUM_DATE", "2004-03-12", "ISO"), 'YDDate::get( "HUM_DATE", "2004-03-12", "ISO" )');
     YDDebugUtil::dump(YDDate::now(), 'YDDate::now()');
     YDDebugUtil::dump(YDDate::now("EUN_DATE"), 'YDDate::now( "EUN_DATE" )');
     YDDebugUtil::dump(YDDate::now("ISO_TIME"), 'YDDate::now( "ISO_TIME" )');
     YDDebugUtil::dump(YDDate::now("HUM"), 'YDDate::now( "HUM" )');
     YDDebugUtil::dump(YDDate::isValid(""), 'YDDate::isValid( "" )');
     YDDebugUtil::dump(YDDate::isValid("0000-00-00 00:00:00", "ISO"), 'YDDate::isValid( "0000-00-00 00:00:00", "ISO" )');
     YDDebugUtil::dump(YDDate::isValid("0000-00-00 00:00:00", "ISO", true, false), 'YDDate::isValid( "0000-00-00 00:00:00", "ISO", true, false )');
     YDDebugUtil::dump(YDDate::isValid("2005-5-5"), 'YDDate::isValid( "2005-5-5" )');
     YDDebugUtil::dump(YDDate::isValid("2005 5 15"), 'YDDate::isValid( "2005 5 15" )');
     YDDebugUtil::dump(YDDate::isValid("20050515", "SQL"), 'YDDate::isValid( "20050515", "SQL" )');
     YDDebugUtil::dump(YDDate::isValid("15 5 2005", "EUN"), 'YDDate::isValid( "15 5 2005", "EUN" )');
     YDDebugUtil::dump(YDDate::isValid("15 May 2005", "HUM"), 'YDDate::isValid( "15 May 2005", "HUM" )');
     YDDebugUtil::dump(YDDate::isValid("5.15.2005", "USA"), 'YDDate::isValid( "5.15.2005", "USA" )');
     YDDebugUtil::dump(YDDate::isValid("5.15.2005", "EUN"), 'YDDate::isValid( "5.15.2005", "EUN" )');
     YDDebugUtil::dump(YDDate::isValid("5.15.2005", "HUM"), 'YDDate::isValid( "5.15.2005", "HUM" )');
     YDDebugUtil::dump(YDDate::isValid("5.15.2005", "ISO"), 'YDDate::isValid( "5.15.2005", "ISO" )');
     YDDebugUtil::dump(YDDate::isValid("5.15.2005", "SQL"), 'YDDate::isValid( "5.15.2005", "SQL" )');
     $date = new YDDate();
     // Setting an empty date
     $date->set("0000-00-00 00:00:00");
     YDDebugUtil::dump($date->get(), '$date->set( "0000-00-00 00:00:00" )');
     // Setting Unix epoch
     $date->set(0);
     YDDebugUtil::dump($date->get(), '$date->set( 0 )');
     // Setting in SQL format
     $date->set("20050515", "SQL");
     YDDebugUtil::dump($date->get(), '$date->set( "20050515", "SQL" )');
     // Setting in ISO format
     $date->set("2005-5-5");
     YDDebugUtil::dump($date->get(), '$date->set( "2005-5-15" )');
     $date->set("2005 5 15");
     YDDebugUtil::dump($date->get(), '$date->set( "2005 5 15" )');
     // Setting in EUN format
     $date->set("15 5 2005", "EUN");
     YDDebugUtil::dump($date->get(), '$date->set( "15 5 2005", "EUN" )');
     // Setting in HUM format
     $date->set("15 May 2005", "HUM");
     YDDebugUtil::dump($date->get(), '$date->set( "15 May 2005", "HUM" )');
     // Setting in USA format
     $date->set("5.15.2005", "USA");
     YDDebugUtil::dump($date->get(), '$date->set( "5.15.2005", "USA" )');
     // Setting a custom format
     YDDebugUtil::dump(YDDateFormat::setString("custom format", "%a %A %b %B %d %m %Y %H %M %S %T %w"), 'YDDateFormat::setString( "custom format", "%a %A %b %B %d %m %Y %H %M %S %T %w" )');
     // Returning the date with a custom format
     YDDebugUtil::dump($date->get("custom format"), '$date->get( "custom format" )');
     // Setting the date to today
     $date->set();
     YDDebugUtil::dump($date->get(), '$date->set()');
     // Getting date info
     YDDebugUtil::dump($date->get(), '$date->get()');
     YDDebugUtil::dump($date->isToday(), '$date->isToday()');
     YDDebugUtil::dump($date->isTomorrow(), '$date->isTomorrow()');
     YDDebugUtil::dump($date->isYesterday(), '$date->isYesterday()');
     YDDebugUtil::dump($date->isCurrentHour(), '$date->isCurrentHour()');
     YDDebugUtil::dump($date->isCurrentMinute(), '$date->isCurrentMinute()');
     YDDebugUtil::dump($date->isCurrentMonth(), '$date->isCurrentMonth()');
     YDDebugUtil::dump($date->isCurrentYear(), '$date->isCurrentYear()');
     YDDebugUtil::dump($date->getDayName(), '$date->getDayName()');
     YDDebugUtil::dump($date->getDayName(true), '$date->getDayName( true )');
     YDDebugUtil::dump($date->getMonthName(), '$date->getMonthName()');
     YDDebugUtil::dump($date->getMonthName(true), '$date->getMonthName( true )');
     // Getting date info with different locale
     YDDebugUtil::dump(YDLocale::set("ptb"), 'YDLocale::set( "ptb" )');
     YDDebugUtil::dump($date->getDayName(), '$date->getDayName()');
     YDDebugUtil::dump($date->getDayName(true), '$date->getDayName( true )');
     YDDebugUtil::dump($date->getMonthName(), '$date->getMonthName()');
     YDDebugUtil::dump($date->getMonthName(true), '$date->getMonthName( true )');
     // Comparing two dates
     $date2 = $date;
     $date2->addHour(10);
     $date2->addDay(35);
     YDDebugUtil::dump($date->get(), 'Date 1');
     YDDebugUtil::dump($date2->get(), 'Date 2');
     YDDebugUtil::dump($date->getDifference($date2), 'Difference between Dates 1 and 2');
     // Adding values
     YDDebugUtil::dump($date->get(), '$date->get()');
     YDDebugUtil::dump($date->addSecond(70), '$date->addSecond( 70 )');
     YDDebugUtil::dump($date->addMinute(80), '$date->addMinute( 80 )');
     YDDebugUtil::dump($date->addHour(24), '$date->addHour( 24 )');
     YDDebugUtil::dump($date->addHour(12), '$date->addHour( 12 )');
     YDDebugUtil::dump($date->addHour(-10), '$date->addHour( -10 )');
     YDDebugUtil::dump($date->addHour(-24), '$date->addHour( -24 )');
     YDDebugUtil::dump($date->addMinute(10), '$date->addMinute( 10 )');
     YDDebugUtil::dump($date->addMinute(60), '$date->addMinute( 60 )');
     YDDebugUtil::dump($date->addMinute(120), '$date->addMinute( 120 )');
     YDDebugUtil::dump($date->addMinute(-120), '$date->addMinute( -120 )');
     YDDebugUtil::dump($date->addMinute(360), '$date->addMinute( 360 )');
     YDDebugUtil::dump($date->addSecond(10), '$date->addSecond( 10 )');
     YDDebugUtil::dump($date->addSecond(60), '$date->addSecond( 60 )');
     YDDebugUtil::dump($date->addSecond(3600), '$date->addSecond( 3600 )');
     YDDebugUtil::dump($date->addSecond(), '$date->addSecond( -10 )');
     YDDebugUtil::dump($date->addDay(40), '$date->addDay( 40 )');
     YDDebugUtil::dump($date->addDay(-3), '$date->addDay( -3 )');
     YDDebugUtil::dump($date->addMonth(1), '$date->addMonth( 1 )');
     YDDebugUtil::dump($date->addMonth(12), '$date->addMonth( 12 )');
     YDDebugUtil::dump($date->addMonth(10), '$date->addMonth( 10 )');
     YDDebugUtil::dump($date->addMonth(-4), '$date->addMonth( -4 )');
     YDDebugUtil::dump($date->addMonth(-20), '$date->addMonth( -20 )');
     YDDebugUtil::dump($date->addYear(1), '$date->addYear( 1 )');
     YDDebugUtil::dump($date->addYear(12), '$date->addYear( 12 )');
     YDDebugUtil::dump($date->addYear(10), '$date->addYear( 10 )');
     YDDebugUtil::dump($date->addYear(-4), '$date->addYear( -4 )');
     YDDebugUtil::dump($date->addYear(-20), '$date->addYear( -20 )');
     // Getting an array
     YDDebugUtil::dump($date->toArray(), '$date->toArray()');
     $date->set("1981-11-20");
     YDDebugUtil::dump($date->get(), '$date->set( "1981-11-20" )');
     YDDebugUtil::dump($date->getYearsToToday(), '$date->getYearsToToday()');
     // Should return an error
     YDDebugUtil::dump($date->set("no_date"), '$date->set( "no_date" )');
 }
 /**
  *  This function returns the number of days in the month.
  *
  *  @param $month (Optional) If empty, object's month. Default: empty.
  *  @param $year  (Optional) If empty, object's year. Default: empty.
  *
  *  @returns  The number of days in the month.
  *
  *  @static  If $month and $year are passed.
  */
 function getDaysInMonth($month = '', $year = '')
 {
     if (!$month) {
         $month = $this->month;
     }
     if (!$year) {
         $year = $this->year;
     }
     switch ((int) $month) {
         case 1:
             return 31;
         case 2:
             return YDDate::isLeapYear($year) ? 29 : 28;
         case 3:
             return 31;
         case 4:
             return 30;
         case 5:
             return 31;
         case 6:
             return 30;
         case 7:
             return 31;
         case 8:
             return 31;
         case 9:
             return 30;
         case 10:
             return 31;
         case 11:
             return 30;
         case 12:
             return 31;
     }
     return 0;
 }
 /**
  *  This function calculates the difference in years, quarters, months, 
  *  weeks, weekdays, days, hours, minutes and seconds between the object
  *  and another date passed.
  *
  *  @param  $date  The other date to be compared. A YDDate object,
  *                 timestamp, array or string. If null, the current date.
  *
  *  @returns       An array with all the difference information.
  *
  *  @todo          Not very efficient for big differences.
  */
 function getDifference($date)
 {
     if (!extension_loaded('calendar')) {
         trigger_error('The PHP calendar extension must be enabled', YD_ERROR);
     }
     if ($this->isDateEmpty()) {
         trigger_error('Cannot make calculations with an empty date', YD_ERROR);
     }
     $start = $this;
     $end = new YDDate($date);
     $span = array();
     $span['years'] = 0;
     $span['quarters'] = 0;
     $span['months'] = 0;
     $span['weeks'] = 0;
     $span['days'] = 0;
     $span['weekdays'] = 0;
     $span['hours'] = 0;
     $span['minutes'] = 0;
     $span['seconds'] = 0;
     if ($start->timestamp_string == $end->timestamp_string) {
         return $span;
     }
     $julian_start = GregoriantoJD($start->month, $start->day, $start->year);
     $julian_end = GregoriantoJD($end->month, $end->day, $end->year);
     $days = abs($julian_end - $julian_start);
     $years = 0;
     $quarters = 0;
     $months = 0;
     $weeks = 0;
     $weekdays = 0;
     $hours = 0;
     $minutes = 0;
     $seconds = 0;
     $neg = 1;
     $s =& $start;
     $e =& $end;
     if ($start->timestamp_string > $end->timestamp_string) {
         $neg = -1;
         $s =& $end;
         $e =& $start;
     }
     $hours += $e->hours - $s->hours;
     $minutes += $e->minutes - $s->minutes;
     $seconds += $e->seconds - $s->seconds;
     $hours += $days * 24;
     $minutes += $hours * 60;
     $seconds += $minutes * 60;
     $count = $days;
     $weekend = $s->getWeekDay() == 0 || $s->getWeekDay() == 6 ? true : false;
     $monthend = $s->day == YDDate::getDaysInMonth($s->month, $s->year) ? true : false;
     $quarterend = $s->month == 3 * $s->getQuarter() && $monthend ? true : false;
     $yearend = $s->month === 12 && $s->day === 31 ? true : false;
     while ($count > 0) {
         if (!($s->getWeekDay() == 0 || $s->getWeekDay() == 6)) {
             if ($weekend) {
                 $weeks++;
             }
             $weekdays++;
             $weekend = false;
         } else {
             $weekend = true;
         }
         if (!($s->day == YDDate::getDaysInMonth($s->month, $s->year))) {
             if ($monthend) {
                 $months++;
             }
             $monthend = false;
         } else {
             $monthend = true;
         }
         if (!($s->month == 3 * $s->getQuarter() && $monthend)) {
             if ($quarterend) {
                 $quarters++;
             }
             $quarterend = false;
         } else {
             $quarterend = true;
         }
         if (!($s->month === 12 && $s->day === 31)) {
             if ($yearend) {
                 $years++;
             }
             $yearend = false;
         } else {
             $yearend = true;
         }
         $s->addDay(1);
         $count--;
     }
     $span['years'] = $neg * $years;
     $span['quarters'] = $neg * $quarters;
     $span['months'] = $neg * $months;
     $span['weeks'] = $neg * $weeks;
     $span['days'] = $neg * $days;
     $span['weekdays'] = $neg * $weekdays;
     $span['hours'] = $neg * $hours;
     $span['minutes'] = $neg * $minutes;
     $span['seconds'] = $neg * $seconds;
     return $span;
 }
 /**
  *  This function sets the value for the date element.
  *
  *  @param  $val    (optional) The value for this object.
  */
 function setValue($val = array())
 {
     $now = getdate();
     $elements = $this->_getElements();
     $getdate = array('day' => 'mday', 'month' => 'mon', 'year' => 'year', 'hours' => 'hours', 'minutes' => 'minutes', 'seconds' => 'seconds');
     // if we have a string (eg: "2007-01-01 00:00:01") we will get the array
     if (!is_numeric($val) && !is_array($val)) {
         // include YDDate lib
         YDInclude('YDDate.php');
         // create date object and export array
         $_d = new YDDate($val);
         $val = $_d->toArray();
     }
     if (is_numeric($val)) {
         $now = getdate($val);
         if (!is_int($val)) {
             $val = intval($val);
         }
         $this->_value = array();
         foreach ($elements as $element) {
             $this->_value[$element] = $now[$getdate[$element]];
         }
     } elseif ($val == array()) {
         foreach ($elements as $element) {
             $this->_value[$element] = $now[$getdate[$element]];
         }
     } else {
         $this->_value = $val;
         foreach ($elements as $element) {
             if (!isset($this->_value[$element])) {
                 $this->_value[$element] = $now[$getdate[$element]];
             }
         }
     }
     foreach ($elements as $element) {
         if ($element == 'year') {
             continue;
         }
         if (strlen($this->_value[$element]) == 1) {
             $this->_value[$element . '_with_zero'] = '0' . $this->_value[$element];
         } else {
             $this->_value[$element . '_with_zero'] = $this->_value[$element];
         }
     }
     $this->_value['timestamp_string'] = '';
     if (isset($this->_value['year'])) {
         $this->_value['timestamp_string'] .= $this->_value['year'];
     }
     if (isset($this->_value['month_with_zero'])) {
         $this->_value['timestamp_string'] .= $this->_value['month_with_zero'];
     }
     if (isset($this->_value['day_with_zero'])) {
         $this->_value['timestamp_string'] .= $this->_value['day_with_zero'];
     }
     if (isset($this->_value['hours_with_zero'])) {
         $this->_value['timestamp_string'] .= $this->_value['hours_with_zero'];
     }
     if (isset($this->_value['minutes_with_zero'])) {
         $this->_value['timestamp_string'] .= $this->_value['minutes_with_zero'];
     }
     if (isset($this->_value['seconds_with_zero'])) {
         $this->_value['timestamp_string'] .= $this->_value['seconds_with_zero'];
     }
 }
 function getStatsDays($limit = 7)
 {
     YDInclude('YDDate.php');
     $records = $this->db->getRecords('SELECT date, SUM(hits) AS hits FROM #_statistics GROUP BY date ORDER BY date DESC', $limit);
     foreach ($records as $key => $record) {
         $date = new YDDate($record['date']);
         $records[$key]['date'] = $record['date'] . ' (' . strtolower($date->getDayName()) . ')';
     }
     return $records;
 }
 /**
  *  This function returns the quarter of the date.
  *
  *  @param $date   (Optional) A YDDate object, timestamp, array or string.
  *                            If null, the date of the object. Default: null.
  *  @param $format (Optional) The format name. Default: 'ISO'.
  *
  *  @returns  The quarter.
  *
  *  @static   If $date is passed.
  */
 function getQuarter($date = null, $format = 'ISO')
 {
     if ($date === null) {
         $date = $this->parse($date, $format);
     } else {
         $date = YDDate::parse($date, $format);
     }
     switch ($date['month']) {
         case 1:
         case 2:
         case 3:
             return 1;
         case 4:
         case 5:
         case 6:
             return 2;
         case 7:
         case 8:
         case 9:
             return 3;
         case 10:
         case 11:
         case 12:
             return 4;
     }
     return 0;
 }