freelanceprogrammers.org Forum Index » PHP
Re: Digest Number 497
Joined: 18 Mar 2005
Posts: 1
Re: Digest Number 497
hello everybody,
I am new to php prog... and need a big help from anyone of u,plz...
i am working on php and mysql ( and javascript ) on linux (rh9)... in
my application i hav to calculate the no. of sundays between two given
dates.
for ex:-
( my input is )
$date1 = 1 Jan 2005
$date2 = 8 Jan 2005
( my output shud b )
$period = 7
$noSundays = 1
well for the dates there is calender, which is also in javascript and
i am able to calculate the period using javascript too. and that value
i am storing in in the php variables and displaying them. But i need
to substract the sundays too.
Can sombody plz suggest me what to do?
Or if i am not clear in this mail i ll give more info..
thanking you and waiting for ur valuable responces
-regards
shyam
Joined: 19 Mar 2005
Posts: 12
Re: Digest Number 497
Hi I recommend you a class from PHP-Classes .org
it perfect for date calculations ...
Take a look at the "public methods" and use the one which suit to you..
here`s the class code:
<?php
/**
* classe pour la gestion de date
* date manipulation
* some stuff comes from SPLIB (DateMath.php)
*
* @author lx barjon <lx-dateobj@...>
* @version 0.1
*
*/
class dateObj {
/**
* Date de référence / current object date
* @var string
* @access private
*/
var $baseDate;
/**
* timestamp
* @var int
* @access private
*/
var $timestamp;
/**
* separateur date (`-` par défaut) / date separator
* @var string
* @access private
*/
var $dateSeparator;
/**
* separateur time (`:` par défaut) / time separator
* @var string
* @access private
*/
var $timeSeparator;
/**
* separateur Datetime (` ` par défaut) / date/time separator
* @var string
* @access private
*/
var $dateTimeSeparator;
/**
* liste des jours en français (à modifier dans le constructeur pour
une autre langue)
* @var array
* @access private
*/
var $lgueDays;
/**
* liste des mois en français (à modifier dans le constructeur pour
une autre langue)
* @var array
* @access private
*/
var $lgueMonths;
/**
* -------------------------------------------------------
* METHODES PUBLIQUES / PUBLIC METHODS
* -------------------------------------------------------
*/
/**
* Constructeur / Constructor
*
* @param string $baseDate Date pour initialiser l`objet / date to
init the object
* @acces public
*/
function dateObj( $baseDate = `` ) {
$this->dateSeparator = `-`;
$this->timeSeparator = `:`;
$this->dateTimeSeparator = ` `;
if ( empty($baseDate) ) $this->baseDate = date("Y-m-d H:i:s");
else $this->baseDate = $baseDate;
$this->timestamp = $this->date_to_timestamp();
$this->lgueDays = array(
`Sunday`=>`domenica`,
`Sun`=>`dom`,
`Monday`=>`lunedì`,
`Mon`=>`lun`,
`Tuesday`=>`martedì`,
`Tue`=>`mar`,
`Wednesday`=>`mercoledì`,
`Wed`=>`mer`,
`Thursday`=>`giovedì`,
`Thu`=>`gio`,
`Friday`=>`venerdì`,
`Fri`=>`ven`,
`Saturday`=>`sabato`,
`Sat`=>`sab`
);
$this->lgueMonths = array(
`January`=>`gennaio`,
`Jan`=>`gen`,
`February`=>`febbraio`,
`Feb`=>`feb`,
`March`=>`marzo`,
`Mar`=>`mar`,
`April`=>`aprile`,
`Apr`=>`apr`,
`May`=>`maggio`,
`June`=>`juin`,
`Jun`=>`giugno`,
`July`=>`luglio`,
`Jul`=>`juil`,
`August`=>`agosto`,
`Aug`=>`aoû`,
`September`=>`settembre`,
`Sep`=>`sep`,
`October`=>`ottobre`,
`Oct`=>`oct`,
`November`=>`novembre`,
`Nov`=>`nov`,
`December`=>`dicembre`,
`Dec`=>`dic`
);
}
/**
* set_date
*
* @desc change la date de l`objet / set date for the object
* @param string Nouvelle date
* @access public
*/
function set_date( $date ) {
$this->baseDate = $date;
$this->timestamp = $this->date_to_timestamp();
}
/**
* date_to_timestamp
*
* @desc retourne un timestamp de la date fournie
ou de la date de l`objet si aucune date fournie
/ return $date timestamp or object date timestamp
* @param string $date Date à traiter
* @access public
*/
function date_to_timestamp( $date = `` ) {
if ( empty($date) ) $date = $this->baseDate;
### recup date dans un tableau assoc
$dateInfo = $this->date_to_array( $date );
return mktime( $dateInfo[`H`], $dateInfo[`i`], $dateInfo[`s`],
$dateInfo[`m`], $dateInfo[`d`], $dateInfo[`Y`]);
}
/**
* date_add
*
* @desc ajoute $howMany à $toWhat sur la date de l`objet et
retourne la date au format $format
* @param int $howMany
* @param string $toWhat Valeur possible / possible value
Y m d H i s
* @param string $format
* @access public
*/
function date_add( $howMany, $toWhat, $format = "Y-m-d H:i:s" ) {
$dateInfo = $this->date_to_array();
$dateInfo[$toWhat] += $howMany;
$tmpDate = date( "Y-m-d H:i:s", mktime( $dateInfo[`H`],
$dateInfo[`i`], $dateInfo[`s`], $dateInfo[`m`], $dateInfo[`d`],
$dateInfo[`Y`]) );
return $this->format( $format, $tmpDate );
}
/**
* date_sub
*
* @desc retire $howMany à $toWhat sur la date de l`objet et
retourne la date au format $format
* @param int $howMany
* @param string $toWhat Valeur possible / possible value
Y m d H i s
* @param string $format
* @access public
*/
function date_sub( $howMany, $toWhat, $format = "Y-m-d H:i:s" ) {
$dateInfo = $this->date_to_array();
$dateInfo[$toWhat] -= $howMany;
$tmpDate = date( "Y-m-d H:i:s", mktime( $dateInfo[`H`],
$dateInfo[`i`], $dateInfo[`s`], $dateInfo[`m`], $dateInfo[`d`],
$dateInfo[`Y`]) );
return $this->format( $format, $tmpDate );
}
/**
* get_timestamp
*
* @desc retourne le timestamp de la date de l`objet
* @access public
*/
function get_timestamp() {
return $this->timestamp;
}
/**
* date_to_array
*
* @desc retourne un tableau associatif avec les paramètres de la date fournie
* @param string $date Date à traiter, si vide -> date de ref de l`objet
* @return array
*/
function date_to_array( $dateTime = `` ) {
if ( empty($dateTime) ) $dateTime = $this->baseDate;
$arrayDate = array();
### verif présence heure
$timePos = strpos( $dateTime, $this->dateTimeSeparator );
if ( $timePos ) {
$date = substr( $dateTime, 0, $timePos );
$time = substr( $dateTime, $timePos+strlen($this->timeSeparator),
strlen($dateTime) );
} else $date = $dateTime;
### Traitement date
# -- verif si date valide
$dateIsValid = true;
# *** date au format d m Y ?
$pattern =
"([0-9]{1,2})".$this->dateSeparator."([0-9]{1,2})".$this->dateSeparator."([0-9]{
4})";
if ( ereg($pattern, $date, $regs) ) {
$arrayDate[`Y`] = intval($regs[3]);
$arrayDate[`m`] = intval($regs[2]);
$arrayDate[`d`] = intval($regs[1]);
} else {
# *** sinon date au format y m d ?
$pattern =
"([0-9]{4})".$this->dateSeparator."([0-9]{1,2})".$this->dateSeparator."([0-9]{1,
2})";
if ( ereg($pattern, $date, $regs) ) {
$arrayDate[`Y`] = intval($regs[1]);
$arrayDate[`m`] = intval($regs[2]);
$arrayDate[`d`] = intval($regs[3]);
# *** sinon date invalide
} else $dateIsValid = false;
}
if ( !$dateIsValid ) {
trigger_error( `<p>class dateObj::date_to_array($date) --> la date
fournie est invalide!<br>Date fournie : `.$dateTime.`</p>`,
E_USER_ERROR );
}
### Traitement heure
# -- heure existe ?
if ( isset($time) ) {
$hour = explode( $this->timeSeparator, $time );
$arrayDate[`H`] = intval($hour[0]);
$arrayDate[`i`] = intval($hour[1]);
$arrayDate[`s`] = intval($hour[2]);
# -- sinon 0 par défaut
} else {
$arrayDate[`H`] = 0;
$arrayDate[`i`] = 0;
$arrayDate[`s`] = 0;
}
return $arrayDate;
}
/**
* format
*
* @desc met la date $date au format $format (compatible fonction date();)
* @param string $format Format désiré pour la date (ex: "le d-m-Y à H:i:s")
* @param string $date Date à traiter, si false -> date de ref de l`objet
* @return string
*/
function format( $format, $date = `` ) {
if ( empty($date) ) $timestamp = $this->timestamp;
else {
$timestamp = $this->date_to_timestamp( $date );
}
$mydate = date($format, $timestamp);
$days = $this->_en_notations_list($this->lgueDays);
if ( preg_match("(".$days.")", $mydate, $regs) ) {
$mydate = str_replace( $regs[0], $this->lgueDays[$regs[0]], $mydate );
}
$months = $this->_en_notations_list($this->lgueMonths);
if ( preg_match("(".$months.")", $mydate, $regs) ) {
$mydate = str_replace( $regs[0], $this->lgueMonths[$regs[0]], $mydate );
}
return $mydate;
}
/**
* diff
*
* @desc effectue this->timestamp - timestamp($date)
* @param string $date Date à soustraire à la date de ref
* @param string $retMode Mode pour l`info de retour
valeur possible :
jours, days, heures, hours, minutes, mins, all
ou vide -> valeur par défaut = secondes
* @param string $roundMode Fonction à utiliser pour l`arrondi des
calculs -> none = pas d`arrondi
*/
function diff( $date, $retMode = ``, $roundMode = `ceil` ) {
if ( empty($date) ) {
trigger_error("class dateObj::diff($date) --> la date à soustraire
n`est pas définie.", E_USER_ERROR );
} else {
$diffSecondes = ( $this->timestamp - $this->date_to_timestamp($date) );
$diff = array();
switch ($retMode) {
case `all` :
{
$diffMinutes = bcdiv( $diffSecondes, 60, 2 );
$diffHours = bcdiv( $diffMinutes, 60, 2 );
$numHours = bcmod( $diffHours, 24 );
$numMinutes = bcmod( $diffMinutes, 60);
$numSeconde = bcmod( $diffSecondes, 60 );
$diff[`days`] = abs(bcdiv( $diffHours, 24 ));
$diff[`hours`] = abs($numHours);
$diff[`minutes`] = abs($numMinutes);
$diff[`secondes`] = abs($numSeconde);
return $diff;
break;
}
case `annees` :
case `years` :
case `Y` :
{
$diffDays = bcdiv( $diffSecondes, 86400, 2 );
if ( $roundMode != `none` ) eval( "$diffYears = $roundMode(
bcdiv( $diffDays, 365, 2 ) );" );
else $diffYears = bcdiv( $diffDays, 365, 2 );
return $diffYears;
break;
}
case `jours` :
case `days` :
case `d` :
{
if ( $roundMode != `none` ) eval( "$diffDays = $roundMode(
bcdiv($diffSecondes, 86400, 2) );" );
else $diffDays = bcdiv($diffSecondes, 86400, 2);
return $diffDays;
break;
}
case `heures` :
case `hours` :
case `H` :
{
if ( $roundMode != `none` ) eval( "$diffHours = $roundMode(
bcdiv( $diffSecondes, 3600, 2 ) );" );
else $diffHours = bcdiv( $diffSecondes, 3600, 2 );
return $diffHours;
break;
}
case `minutes` :
case `mins` :
case `i` :
{
if ( $roundMode != `none` ) eval( "$diffMinutes = $roundMode(
bcdiv( $diffSecondes, 60, 2 ) );" );
else $diffMinutes = bcdiv( $diffSecondes, 60, 2 );
return $diffMinutes;
break;
}
default :
{
return $diffSecondes;
break;
}
}
}
}
/**
* Les fonction qui suivent permettent de vérifier si la date courante :
* some function to check if current date (object date) :
* est égale à $date / is equal to $date -> is_eq
* est plus grande que $date / is greater than $date -> is_gt
* est plus grande ou égale à $date / is greater than or equal to
$date -> is_gte
* ...
*/
function is_eq( $date ) {
$myTimestamp = $this->date_to_timestamp( $date );
if ( $this->timestamp == $myTimestamp ) return true;
else return false;
}
function is_gt( $date ) {
$myTimestamp = $this->date_to_timestamp( $date );
if ( $this->timestamp > $myTimestamp ) return true;
else return false;
}
function is_gte( $date ) {
$myTimestamp = $this->date_to_timestamp( $date );
if ( $this->timestamp >= $myTimestamp ) return true;
else return false;
}
function is_lt( $date ) {
$myTimestamp = $this->date_to_timestamp( $date );
if ( $this->timestamp < $myTimestamp ) return true;
else return false;
}
function is_lte( $date ) {
$myTimestamp = $this->date_to_timestamp( $date );
if ( $this->timestamp <= $myTimestamp ) return true;
else return false;
}
### useful stuff from DateMath.php
# -- this one is modified to match my language
function day_of_week( $numeric = false ) {
if ( $numeric ) {
return date(`w`, $this->timestamp);
} else {
return $this->lgueDays[date(`l`, $this->timestamp)];
}
}
function day_of_year() {
return date(`z`, $this->timestamp);
}
function week_of_year() {
return date(`W`, $this->timestamp);
}
function days_in_month() {
return date(`t`, $this->timestamp);
}
function is_leap_year() {
return date(`L`, $this->timestamp);
}
function first_day_in_month( $numeric = false ) {
$firstDay = mktime( 0, 0, 0, date(`m`, $this->timestamp), 1,
date(`Y`, $this->timestamp) );
if ( $numeric ) {
return date(`w`, $firstDay);
} else {
return $this->lgueDays[date(`l`, $firstDay)];
}
}
/**
*
*/
function _en_notations_list( $notationsType ) {
$enNotations = array_keys( $notationsType );
return `(`.implode( `|`, $enNotations ).`)`;
}
}
?>
All times are GMT
Page 1 of 1
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Freelace Website Designer - Customer web design and software building.
China Wholesale - Electronics Products
Character Studio - Tutorials and Help
China Wholesale - Electronics Products
Character Studio - Tutorials and Help







