<?php
/**
 * JEvents Component for Joomla! 3.x
 *
 * @version     $Id: jeventdate.php 1784 2011-03-14 14:28:13Z geraintedwards $
 * @package     JEvents
 * @copyright   Copyright (C) 2008-2020 GWESystems Ltd, 2006-2008 JEvents Project Group
 * @license     GNU/GPLv2, see http://www.gnu.org/licenses/gpl-2.0.html
 * @link        http://www.jevents.net
 */

defined('_JEXEC') or die('Restricted access');

// TODO replace with JevDate

class JEventDate
{
	var $year = null;
	var $month = null;
	var $day = null;
	var $hour = null;
	var $minute = null;
	var $second = null;
	var $dim = null;

	function __construct($datetime = '')
	{

		$time = JevDate::strtotime($datetime);
		if ($datetime != "" && $time !== false)
		{
			$this->date = $time;
			$parts      = explode(":", date("Y:m:j:G:i:s:t", $this->date));

			$this->year   = intval($parts[0]);
			$this->month  = intval($parts[1]);
			$this->day    = intval($parts[2]);
			$this->hour   = intval($parts[3]);
			$this->minute = intval($parts[4]);
			$this->second = intval($parts[5]);
			$this->dim    = intval($parts[6]);
		}
		else
		{
			$this->date = time();
			$parts      = explode(":", date("Y:m:j:G:i:s:t", $this->date));

			$this->year   = intval($parts[0]);
			$this->month  = intval($parts[1]);
			$this->day    = intval($parts[2]);
			$this->hour   = 0;
			$this->minute = 0;
			$this->second = 0;
			$this->dim    = intval($parts[6]);

		}
	}

	function setDate($year = 0, $month = 0, $day = 0)
	{

		$this->date = JevDate::mktime(0, 0, 0, $month, $day, $year);
		$parts      = explode(":", date("Y:m:j:G:i:s:t", $this->date));

		$this->year   = intval($parts[0]);
		$this->month  = intval($parts[1]);
		$this->day    = intval($parts[2]);
		$this->hour   = intval($parts[3]);
		$this->minute = intval($parts[4]);
		$this->second = intval($parts[5]);
		$this->dim    = intval($parts[6]);
	}

	function get12hrTime()
	{

		return date("g:ia", $this->date);
	}

	function get24hrTime()
	{

		return sprintf('%02d:%02d', $this->hour, $this->minute);
	}

	function toDateURL()
	{

		return ('year=' . $this->getYear(1)
			. '&month=' . $this->getMonth(1)
			. '&day=' . $this->getDay(1)
		);
	}

	function getYear($asString = false)
	{

		return $asString ? sprintf('%04d', $this->year) : $this->year;
	}

	function getMonth($asString = false)
	{

		return $asString ? sprintf('%02d', $this->month) : $this->month;
	}

	function getDay($asString = false)
	{

		return $asString ? sprintf('%02d', $this->day) : $this->day;
	}

	/**
	 * Utility function for calculating the days in the month
	 *
	 * If no parameters are supplied then it uses the current date
	 * if 'this' object does not exist
	 *
	 * @param int The month
	 * @param int The year
	 */
	function daysInMonth($month = 0, $year = 0)
	{

		$month = intval($month);
		$year  = intval($year);

		if (!$month)
		{
			if (isset($this))
			{
				$month = $this->month;
			}
			else
			{
				$month = date('m');
			}
		}

		if (!$year)
		{
			if (isset($this))
			{
				$year = $this->year;
			}
			else
			{
				$year = date('Y');
			}
		};

		return intval(date("t", JevDate::mktime(0, 0, 0, $month, 1, $year)));
	}

	/**
	 * Adds (+/-) a number of months to the current date.
	 *
	 * @param int Positive or negative number of months
	 */
	function addMonths($n = 0)
	{

		// correct for months where number of days is shorter than source month)
		$dim        = intval(date("t", JevDate::mktime(0, 0, 0, $this->month + $n, 1, $this->year)));
		$this->date = JevDate::mktime($this->hour, $this->minute, $this->second, $this->month + $n, min($this->day, $dim), $this->year);
		$parts      = explode(":", date("Y:m:j:G:i:s:t", $this->date));

		$this->year  = intval($parts[0]);
		$this->month = intval($parts[1]);
		$this->day   = intval($parts[2]);
		$this->dim   = intval($parts[6]);

	}

	function addDays($n = 0)
	{

		$this->date = JevDate::mktime($this->hour, $this->minute, $this->second, $this->month, $this->day + $n, $this->year);
		$parts      = explode(":", date("Y:m:j:G:i:s:t", $this->date));

		$this->year  = intval($parts[0]);
		$this->month = intval($parts[1]);
		$this->day   = intval($parts[2]);
		$this->dim   = intval($parts[6]);
	}

	//function toDays( $day=0, $month=0, $year=0)  is no longer needed

	// function fromDays( $days )  is no longer needed
} // end class
