diff --git a/ChangeLog b/ChangeLog
index b0bb143cd02..06aac38c66e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -24,6 +24,7 @@ For users:
- New: task #10606 : more comprehensive message error.
- New: task #11278 : Option into point of sale module to add services in list.
- New: task #11261 : Add an entry into menu called "New shipment".
+- New: [ task #187 ] Gerer les evenement recurrents dans les imports ical
- New: Make option MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT available by default.
- New: Can build PDF in USLetter format or canada format (change paper size).
- New: Can export into Excel 2007 format.
diff --git a/htdocs/comm/action/class/ical.class.php b/htdocs/comm/action/class/ical.class.php
index bddd4802bc5..e821c4ce84d 100644
--- a/htdocs/comm/action/class/ical.class.php
+++ b/htdocs/comm/action/class/ical.class.php
@@ -155,11 +155,11 @@ class ical
}
/**
- * Add to $this->ical array one value and key. Type is VTODO, VEVENT, VFREEBUSY, VCALENDAR ... .
+ * Add to $this->ical array one value and key.
*
- * @param string $type Type
- * @param string $key Key
- * @param string $value Value
+ * @param string $type Type ('VTODO', 'VEVENT', 'VFREEBUSY', 'VCALENDAR'...)
+ * @param string $key Key ('DTSTART', ...). Note: Field is never 'DTSTART;TZID=...' because ';...' was before removed and added as another property
+ * @param string $value Value
* @return void
*/
function add_to_array($type, $key, $value)
diff --git a/htdocs/comm/action/index.php b/htdocs/comm/action/index.php
index 3a316110223..d875269f4ef 100644
--- a/htdocs/comm/action/index.php
+++ b/htdocs/comm/action/index.php
@@ -42,9 +42,9 @@ $showbirthday = GETPOST("showbirthday","int");
$sortfield = GETPOST("sortfield");
$sortorder = GETPOST("sortorder");
$page = GETPOST("page","int");
-if ($page == -1) { $page = 0 ; }
+if ($page == -1) { $page = 0; }
$limit = $conf->liste_limit;
-$offset = $limit * $page ;
+$offset = $limit * $page;
if (! $sortorder) $sortorder="ASC";
if (! $sortfield) $sortfield="a.datec";
@@ -73,9 +73,15 @@ $actioncode=GETPOST("actioncode");
$pid=GETPOST("projectid","int")?GETPOST("projectid","int"):0;
$status=GETPOST("status");
$maxprint=GETPOST("maxprint");
-if (GETPOST('viewcal')) { $action='show_month'; $day=''; } // View by month
-if (GETPOST('viewweek')) { $action='show_week'; $week=($week?$week:date("W")); $day=($day?$day:date("d")); } // View by week
-if (GETPOST('viewday')) { $action='show_day'; $day=($day?$day:date("d")); } // View by day
+if (GETPOST('viewcal')) {
+ $action='show_month'; $day='';
+} // View by month
+if (GETPOST('viewweek')) {
+ $action='show_week'; $week=($week?$week:date("W")); $day=($day?$day:date("d"));
+} // View by week
+if (GETPOST('viewday')) {
+ $action='show_day'; $day=($day?$day:date("d"));
+} // View by day
$langs->load("other");
$langs->load("commercial");
@@ -491,18 +497,18 @@ $listofextcals=array();
if (empty($conf->global->AGENDA_DISABLE_EXT) && $conf->global->AGENDA_EXT_NB > 0)
{
- $i=0;
- while($i < $conf->global->AGENDA_EXT_NB)
- {
- $i++;
- $paramkey='AGENDA_EXT_SRC'.$i;
- $url=$conf->global->$paramkey;
- $paramkey='AGENDA_EXT_NAME'.$i;
- $namecal = $conf->global->$paramkey;
- $paramkey='AGENDA_EXT_COLOR'.$i;
- $colorcal = $conf->global->$paramkey;
- if ($url && $namecal) $listofextcals[]=array('src'=>$url,'name'=>$namecal,'color'=>$colorcal);
- }
+ $i=0;
+ while($i < $conf->global->AGENDA_EXT_NB)
+ {
+ $i++;
+ $paramkey='AGENDA_EXT_SRC'.$i;
+ $url=$conf->global->$paramkey;
+ $paramkey='AGENDA_EXT_NAME'.$i;
+ $namecal = $conf->global->$paramkey;
+ $paramkey='AGENDA_EXT_COLOR'.$i;
+ $colorcal = $conf->global->$paramkey;
+ if ($url && $namecal) $listofextcals[]=array('src'=>$url,'name'=>$namecal,'color'=>$colorcal);
+ }
}
if (count($listofextcals))
@@ -516,38 +522,126 @@ if (count($listofextcals))
//print "url=".$url." namecal=".$namecal." colorcal=".$colorcal;
$ical=new ical();
$ical->parse($url);
+ // After this $ical->cal['VEVENT'] contains array of events, $ical->cal['DAYLIGHT'] contains daylight info, $ical->cal['STANDARD'] contains non daylight info, ...
+ //var_dump($ical->cal); exit;
$icalevents=array();
- if (is_array($ical->get_event_list())) $icalevents=array_merge($icalevents,$ical->get_event_list());
- if (is_array($ical->get_freebusy_list())) $icalevents=array_merge($icalevents,$ical->get_freebusy_list());
+ if (is_array($ical->get_event_list())) $icalevents=array_merge($icalevents,$ical->get_event_list()); // Add $ical->cal['VEVENT']
+ if (is_array($ical->get_freebusy_list())) $icalevents=array_merge($icalevents,$ical->get_freebusy_list()); // Add $ical->cal['VFREEBUSY']
if (count($icalevents)>0)
{
// Duplicate all repeatable events into new entries
+ $moreicalevents=array();
foreach($icalevents as $icalevent)
{
if (is_array($icalevent['RRULE'])) //repeatable event
{
//if ($event->date_start_in_calendar < $firstdaytoshow) $event->date_start_in_calendar=$firstdaytoshow;
//if ($event->date_end_in_calendar > $lastdaytoshow) $event->date_end_in_calendar=$lastdaytoshow;
- $datecur=$icalevent['DTSTART']['unixtime'];
- if ($icalevent['RRULE']['FREQ']=='WEEKLY')
+ if ($icalevent['DTSTART;VALUE=DATE']) //fullday event
{
- $until=dol_stringtotime($icalevent['RRULE']['UNTIL'],1);
-
+ $datecurstart=dol_stringtotime($icalevent['DTSTART;VALUE=DATE'],1);
+ $datecurend=dol_stringtotime($icalevent['DTEND;VALUE=DATE'],1)-1; // We remove one second to get last second of day
}
+ else if (is_array($icalevent['DTSTART']) && ! empty($icalevent['DTSTART']['unixtime']))
+ {
+ $datecurstart=$icalevent['DTSTART']['unixtime'];
+ $datecurend=$icalevent['DTEND']['unixtime'];
+ if (! empty($ical->cal['DAYLIGHT']['DTSTART']) && $datecurstart)
+ {
+ //var_dump($ical->cal);
+ $tmpcurstart=$datecurstart;
+ $tmpcurend=$datecurend;
+ $tmpdaylightstart=dol_mktime(0,0,0,1,1,1970,1) + (int) $ical->cal['DAYLIGHT']['DTSTART'];
+ $tmpdaylightend=dol_mktime(0,0,0,1,1,1970,1) + (int) $ical->cal['STANDARD']['DTSTART'];
+ //var_dump($tmpcurstart);var_dump($tmpcurend); var_dump($ical->cal['DAYLIGHT']['DTSTART']);var_dump($ical->cal['STANDARD']['DTSTART']);
+ // Edit datecurstart and datecurend
+ if ($tmpcurstart >= $tmpdaylightstart && $tmpcurstart < $tmpdaylightend) $datecurstart-=((int) $ical->cal['DAYLIGHT']['TZOFFSETTO'])*36;
+ else $datecurstart-=((int) $ical->cal['STANDARD']['TZOFFSETTO'])*36;
+ if ($tmpcurend >= $tmpdaylightstart && $tmpcurstart < $tmpdaylightend) $datecurend-=((int) $ical->cal['DAYLIGHT']['TZOFFSETTO'])*36;
+ else $datecurend-=((int) $ical->cal['STANDARD']['TZOFFSETTO'])*36;
+ }
+ // datecurstart and datecurend are now GMT date
+ //var_dump($datecurstart); var_dump($datecurend); exit;
+ }
+ else
+ {
+ // Not a recongized record
+ dol_syslog("Found a not recognized repeatable record with unknown date start", LOG_ERR);
+ continue;
+ }
+ //print 'xx'.$datecurstart;exit;
+ $interval=(empty($icalevent['RRULE']['INTERVAL'])?1:$icalevent['RRULE']['INTERVAL']);
+ $until=empty($icalevent['RRULE']['UNTIL'])?0:dol_stringtotime($icalevent['RRULE']['UNTIL'],1);
+ $maxrepeat=empty($icalevent['RRULE']['COUNT'])?0:$icalevent['RRULE']['COUNT'];
+ if ($until && ($until+($datecurend-$datecurstart)) < $firstdaytoshow) continue; // We discard repeatable event that end before start date to show
+ if ($datecurstart > $lastdaytoshow) continue; // We discard repeatable event that start after end date to show
+
+ $numofevent=0;
+ while (($datecurstart <= $lastdaytoshow) && (empty($maxrepeat) || ($numofevent < $maxrepeat)))
+ {
+ if ($datecurend >= $firstdaytoshow) // We add event
+ {
+ $newevent=$icalevent;
+ unset($newevent['RRULE']);
+ if ($icalevent['DTSTART;VALUE=DATE'])
+ {
+ $newevent['DTSTART;VALUE=DATE']=dol_print_date($datecurstart,'%Y%m%d');
+ $newevent['DTEND;VALUE=DATE']=dol_print_date($datecurend+1,'%Y%m%d');
+ }
+ else
+ {
+ $newevent['DTSTART']=$datecurstart;
+ $newevent['DTEND']=$datecurend;
+ }
+ $moreicalevents[]=$newevent;
+ }
+ // Jump on next occurence
+ $numofevent++;
+ $savdatecurstart=$datecurstart;
+ if ($icalevent['RRULE']['FREQ']=='DAILY')
+ {
+ $datecurstart=dol_time_plus_duree($datecurstart, $interval, 'd');
+ $datecurend=dol_time_plus_duree($datecurend, $interval, 'd');
+ }
+ if ($icalevent['RRULE']['FREQ']=='WEEKLY')
+ {
+ $datecurstart=dol_time_plus_duree($datecurstart, $interval, 'w');
+ $datecurend=dol_time_plus_duree($datecurend, $interval, 'w');
+ }
+ elseif ($icalevent['RRULE']['FREQ']=='MONTHLY')
+ {
+ $datecurstart=dol_time_plus_duree($datecurstart, $interval, 'm');
+ $datecurend=dol_time_plus_duree($datecurend, $interval, 'm');
+ }
+ elseif ($icalevent['RRULE']['FREQ']=='YEARLY')
+ {
+ $datecurstart=dol_time_plus_duree($datecurstart, $interval, 'y');
+ $datecurend=dol_time_plus_duree($datecurend, $interval, 'y');
+ }
+ // Test to avoid infinite loop ($datecurstart must increase)
+ if ($savdatecurstart >= $datecurstart)
+ {
+ dol_syslog("Found a rule freq ".$icalevent['RRULE']['FREQ']." not managed by dolibarr code. Assume 1 week frequency.", LOG_ERR);
+ $datecurstart+=3600*24*7;
+ $datecurend+=3600*24*7;
+ }
+ }
}
}
+ $icalevents=array_merge($icalevents,$moreicalevents);
// Loop on each entry into cal file to know if entry is qualified and add an ActionComm into $eventarray
foreach($icalevents as $icalevent)
{
//print $icalevent['SUMMARY'].'->'.var_dump($icalevent).'
';exit;
+ if (! empty($icalevent['RRULE'])) continue; // We found a repeatable event. It was already split into unitary events, so we discard general rule.
// Create a new object action
$event=new ActionComm($db);
$addevent = false;
- if ($icalevent['DTSTART;VALUE=DATE']) //fullday event
+ if ($icalevent['DTSTART;VALUE=DATE']) // fullday event
{
// For full day events, date are also GMT but they wont but converted using tz during output
$datestart=dol_stringtotime($icalevent['DTSTART;VALUE=DATE'],1);
@@ -557,19 +651,12 @@ if (count($listofextcals))
$event->fulldayevent=true;
$addevent=true;
}
- elseif (!is_array($icalevent['DTSTART'])) //non-repeatable and not fullday event DTSTART;TZID=Europe/Paris:20120102T100000
+ elseif (!is_array($icalevent['DTSTART'])) // not fullday event (DTSTART is not array)
{
$datestart=$icalevent['DTSTART'];
$dateend=$icalevent['DTEND'];
$addevent=true;
}
- //elseif (is_array($icalevent['DTSTART']) && ! empty($icalevent['DTSTART']['unixtime']) && ! is_array($icalevent['RRULE']))
- elseif (is_array($icalevent['DTSTART']) && ! empty($icalevent['DTSTART']['unixtime']))
- {
- $datestart=$icalevent['DTSTART']['unixtime'];
- $dateend=$icalevent['DTEND']['unixtime'];
- $addevent=true;
- }
if ($addevent)
{
@@ -583,9 +670,9 @@ if (count($listofextcals))
if($icalevent['SUMMARY']) $event->libelle=$icalevent['SUMMARY'];
elseif($icalevent['DESCRIPTION']) $event->libelle=dol_nl2br($icalevent['DESCRIPTION'],1);
- else $event->libelle = $langs->trans("ExtSiteNoLabel");
+ else $event->libelle = $langs->trans("ExtSiteNoLabel");
- $event->date_start_in_calendar=$event->datep;
+ $event->date_start_in_calendar=$event->datep;
if ($event->datef != '' && $event->datef >= $event->datep) $event->date_end_in_calendar=$event->datef;
else $event->date_end_in_calendar=$event->datep;
@@ -594,11 +681,15 @@ if (count($listofextcals))
if ($event->date_start_in_calendar == $event->date_end_in_calendar)
{
$event->ponctuel=1;
+ //print 'x'.$datestart.'-'.$dateend;exit;
}
// Add event into $eventarray if date range are ok.
if ($event->date_end_in_calendar < $firstdaytoshow || $event->date_start_in_calendar > $lastdaytoshow)
{
+ //print 'x'.$datestart.'-'.$dateend;exit;
+ //print 'x'.$datestart.'-'.$dateend;exit;
+ //print 'x'.$datestart.'-'.$dateend;exit;
// This record is out of visible range
}
else
@@ -618,6 +709,7 @@ if (count($listofextcals))
$daykey=dol_mktime(0,0,0,$mois,$jour,$annee);
$daykeygmt=dol_mktime(0,0,0,$mois,$jour,$annee,true,0,false);
do
+ //print 'x'.$datestart.'-'.$dateend;exit;
{
//if ($event->fulldayevent) print dol_print_date($daykeygmt,'dayhour','gmt').'-'.dol_print_date($daykey,'dayhour','gmt').'-'.dol_print_date($event->date_end_in_calendar,'dayhour','gmt').' ';
$eventarray[$daykey][]=$event;
@@ -796,7 +888,7 @@ else // View by day
$db->close();
/* TODO Export
-print '
+ print '
@@ -955,10 +1047,10 @@ function show_day_events($db, $day, $month, $year, $monthshown, $style, &$eventa
}
else
{
- if ($showinfo)
- {
+ if ($showinfo)
+ {
print $langs->trans("EventOnFullDay")."
\n";
- }
+ }
}
// Show title
diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php
index b11026f70b2..44ddacb3047 100644
--- a/htdocs/core/lib/date.lib.php
+++ b/htdocs/core/lib/date.lib.php
@@ -31,32 +31,33 @@
*/
function get_tz_array()
{
- $tzarray=array( -11=>"Pacific/Midway",
- -10=>"Pacific/Fakaofo",
- -9=>"America/Anchorage",
- -8=>"America/Los_Angeles",
- -7=>"America/Dawson_Creek",
- -6=>"America/Chicago",
- -5=>"America/Bogota",
- -4=>"America/Anguilla",
- -3=>"America/Araguaina",
- -2=>"America/Noronha",
- -1=>"Atlantic/Azores",
- 0=>"Africa/Abidjan",
- 1=>"Europe/Paris",
- 2=>"Europe/Helsinki",
- 3=>"Europe/Moscow",
- 4=>"Asia/Dubai",
- 5=>"Asia/Karachi",
- 6=>"Indian/Chagos",
- 7=>"Asia/Jakarta",
- 8=>"Asia/Hong_Kong",
- 9=>"Asia/Tokyo",
- 10=>"Australia/Sydney",
- 11=>"Pacific/Noumea",
- 12=>"Pacific/Auckland",
- 13=>"Pacific/Enderbury"
- );
+ $tzarray=array(
+ -11=>"Pacific/Midway",
+ -10=>"Pacific/Fakaofo",
+ -9=>"America/Anchorage",
+ -8=>"America/Los_Angeles",
+ -7=>"America/Dawson_Creek",
+ -6=>"America/Chicago",
+ -5=>"America/Bogota",
+ -4=>"America/Anguilla",
+ -3=>"America/Araguaina",
+ -2=>"America/Noronha",
+ -1=>"Atlantic/Azores",
+ 0=>"Africa/Abidjan",
+ 1=>"Europe/Paris",
+ 2=>"Europe/Helsinki",
+ 3=>"Europe/Moscow",
+ 4=>"Asia/Dubai",
+ 5=>"Asia/Karachi",
+ 6=>"Indian/Chagos",
+ 7=>"Asia/Jakarta",
+ 8=>"Asia/Hong_Kong",
+ 9=>"Asia/Tokyo",
+ 10=>"Australia/Sydney",
+ 11=>"Pacific/Noumea",
+ 12=>"Pacific/Auckland",
+ 13=>"Pacific/Enderbury"
+ );
return $tzarray;
}
@@ -78,17 +79,33 @@ function getCurrentTimeZone()
}
+/**
+ * Add a delay of a timezone to a date
+ *
+ * @param timestamp $time Date timestamp
+ * @param string $timezone Timezone
+ * @return timestamp New timestamp
+ */
+function dol_time_plus_timezone($time,$timezone)
+{
+ // TODO Finish function
+
+ return $time;
+}
+
+
/**
* Add a delay to a date
*
* @param timestamp $time Date timestamp (or string with format YYYY-MM-DD)
* @param int $duration_value Value of delay to add
- * @param int $duration_unit Unit of added delay (d, m, y)
+ * @param int $duration_unit Unit of added delay (d, m, y, w)
* @return timestamp New timestamp
*/
function dol_time_plus_duree($time,$duration_value,$duration_unit)
{
- if ($duration_value == 0) return $time;
+ if ($duration_value == 0) return $time;
+ if ($duration_unit == 'w') return $time + (3600*24*7*$duration_value);
if ($duration_value > 0) $deltastring="+".abs($duration_value);
if ($duration_value < 0) $deltastring="-".abs($duration_value);
if ($duration_unit == 'd') { $deltastring.=" day"; }
@@ -98,7 +115,7 @@ function dol_time_plus_duree($time,$duration_value,$duration_unit)
}
-/** Converti les heures et minutes en secondes
+/** Convert hours and minutes into seconds
*
* @param int $iHours Heures
* @param int $iMinutes Minutes
@@ -208,13 +225,16 @@ function ConvertSecondToTime($iSecond,$format='all',$lengthOfDay=86400,$lengthOf
* YYYY-MM-DDTHH:MM:SSZ (RFC3339)
* DD/MM/YY or DD/MM/YYYY (this format should not be used anymore)
* DD/MM/YY HH:MM:SS or DD/MM/YYYY HH:MM:SS (this format should not be used anymore)
- * @param int $gm 1=Input date is GM date, 0=Input date is local date
- * 19700101020000 -> 7200 with gm=1
+ * @param int $gm 1 =Input date is GM date,
+ * 0 =Input date is local date using PHP server timezone
+ * -1=Input date is local date using timezone provided as third parameter
+ * @param string $tz Timezone to use of $gm=-1
* @return date Date
+ * 19700101020000 -> 7200 with gm=1
*
* @see dol_print_date, dol_mktime, dol_getdate
*/
-function dol_stringtotime($string, $gm=1)
+function dol_stringtotime($string, $gm=1, $tz='')
{
// Convert date with format DD/MM/YYY HH:MM:SS. This part of code should not be used.
if (preg_match('/^([0-9]+)\/([0-9]+)\/([0-9]+)\s?([0-9]+)?:?([0-9]+)?:?([0-9]+)?/i',$string,$reg))
@@ -257,7 +277,12 @@ function dol_stringtotime($string, $gm=1)
$string=preg_replace('/([^0-9])/i','',$string);
$tmp=$string.'000000';
- $date=dol_mktime(substr($tmp,8,2),substr($tmp,10,2),substr($tmp,12,2),substr($tmp,4,2),substr($tmp,6,2),substr($tmp,0,4),$gm);
+ $date=dol_mktime(substr($tmp,8,2),substr($tmp,10,2),substr($tmp,12,2),substr($tmp,4,2),substr($tmp,6,2),substr($tmp,0,4),($gm?1:0));
+ if ($gm == -1)
+ {
+ // TODO Define offset according to TZ
+ $date+=0;
+ }
return $date;
}
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index 834f00e8d7d..1b0fcd09ddf 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -825,9 +825,9 @@ function dol_format_address($object)
/**
* Output date in a string format according to outputlangs (or langs if not defined).
- * Return charset is always UTF-8, except if encodetoouput is defined. In this cas charset is output charset
+ * Return charset is always UTF-8, except if encodetoouput is defined. In this case charset is output charset
*
- * @param timestamp $time GM Timestamps date (or deprecated strings 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS')
+ * @param timestamp $time GM Timestamps date
* @param string $format Output date format
* "%d %b %Y",
* "%d/%m/%Y %H:%M",
@@ -973,9 +973,12 @@ function dol_print_date($time,$format='',$tzoutput='tzserver',$outputlangs='',$e
/**
- * Return an array with date info
+ * Return an array with locale date info.
* PHP getdate is restricted to the years 1901-2038 on Unix and 1970-2038 on Windows
*
+ * WARNING: This function always use PHP server timezone to return locale informations.
+ * Usage must be avoid.
+ *
* @param timestamp $timestamp Timestamp
* @param boolean $fast Fast mode
* @return array Array of informations
@@ -1000,6 +1003,7 @@ function dol_print_date($time,$format='',$tzoutput='tzserver',$outputlangs='',$e
* 'yday' => floor($secsInYear/$_day_power),
* 'leap' => $leaf,
* 'ndays' => $ndays
+ * @see dol_print_date, dol_stringtotime, dol_mktime
*/
function dol_getdate($timestamp,$fast=false)
{
@@ -1030,17 +1034,17 @@ function dolibarr_mktime($hour,$minute,$second,$month,$day,$year,$gm=false,$chec
* Replace function mktime not available under Windows if year < 1970
* PHP mktime is restricted to the years 1901-2038 on Unix and 1970-2038 on Windows
*
- * @param int $hour Hour (can be -1 for undefined)
- * @param int $minute Minute (can be -1 for undefined)
- * @param int $second Second (can be -1 for undefined)
- * @param int $month Month (1 to 12)
- * @param int $day Day (1 to 31)
- * @param int $year Year
- * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ
- * @param int $check 0=No check on parameters (Can use day 32, etc...)
- * @param int $isdst Dayling saving time
- * @return timestamp Date as a timestamp, '' if error
- * @see dol_print_date, dol_stringtotime
+ * @param int $hour Hour (can be -1 for undefined)
+ * @param int $minute Minute (can be -1 for undefined)
+ * @param int $second Second (can be -1 for undefined)
+ * @param int $month Month (1 to 12)
+ * @param int $day Day (1 to 31)
+ * @param int $year Year
+ * @param int $gm 1=Input informations are GMT values, otherwise local to server TZ
+ * @param int $check 0=No check on parameters (Can use day 32, etc...)
+ * @param int $isdst Dayling saving time
+ * @return timestamp Date as a timestamp, '' if error
+ * @see dol_print_date, dol_stringtotime, dol_getdate
*/
function dol_mktime($hour,$minute,$second,$month,$day,$year,$gm=false,$check=1,$isdst=true)
{