ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilFormat.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
22 class ilFormat
23 {
24  function ilFormat ()
25  {
26  return;
27  }
28 
29  // Holt das aktuelle Datum und gibt es im Format TT.MM.JJJJ zurck
30  function getDateDE ()
31  {
32  $date = getdate();
33  $datum = sprintf("%02d.%02d.%04d", $date["mday"],$date["mon"],$date["year"]);
34  return $datum;
35  }
36 
45  function input2date ($AInputDate)
46  {
47 
48  $date=""; $y=""; $m=""; $d="";
49 // if (ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})",$idate,$p))
50  if (ereg("([0-9]{1,2}).([0-9]{1,2}).([0-9]{2,4})",$AInputDate,$p))
51  {
52 
53  $d = $p[1];
54  $m = $p[2];
55  $y = $p[3];
56 
57  if (($d>0 && $d<32) && ($m>0 && $m<13) && (strlen($y)!=3))
58  {
59  if (strlen($d) == 1) $d = "0".$d;
60  if (strlen($m) == 1) $m = "0".$m;
61 
62  if (strlen($y) == 2)
63  {
64  if ($y>=70) $y = $y + 1900;
65  if ($y<70) $y = $y + 2000;
66  }
67 
68  // is valid?
69  checkdate($m, $d, $y);
70 
71  // Ausgabe mit Uhrzeit
72 
73  // Uhrzeit holen
74  $uhrzeit = substr($AInputDate, -8);
75 
76  // Uhrzeit auf Gltigkeit prfen
77  if (ereg("([0-9]{2}):([0-9]{2}):([0-9]{2})",$AInputDate,$p))
78  {
79  $h = $p[1];
80  $min = $p[2];
81  $s = $p[3];
82 
83  if (($h>-1 && $h<24) && ($min>-1 && $min<60) && ($s>-1 && $s<60))
84  {
85  // Uhrzeit stimmt/ist vorhanden
86  $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$y,$m,$d,$h,$min,$s);
87  }
88  }
89  else
90  {
91  // Uhrzeit ist falsch/fehlt; hnge aktuelle Zeit an
92  $zeit = getdate();
93  $date = sprintf("%04d-%02d-%02d %02d:%02d:%02d",$y,$m,$d,$zeit["hours"],$zeit["minutes"],$zeit["seconds"]);
94  }
95  // Ausgabe ohne Uhrzeit
96  //$date = sprintf("%04d-%02d-%02d",$y,$m,$d);
97  return $date;
98  }
99  }
100  }
101 
102 
107  function dateDB2timestamp ($ADatumSQL)
108  {
109  $timestamp = substr($ADatumSQL, 0, 4).
110  substr($ADatumSQL, 5, 2).
111  substr($ADatumSQL, 8, 2).
112  substr($ADatumSQL, 11, 2).
113  substr($ADatumSQL, 14, 2).
114  substr($ADatumSQL, 17, 2);
115 
116  return $timestamp;
117  }
118 
123  function dateDE2timestamp ($ADatum)
124  {
125  $timestamp = substr($ADatum, 6, 4).
126  substr($ADatum, 3, 2).
127  substr($ADatum, 0, 2).
128  substr($ADatum, 11, 2).
129  substr($ADatum, 14, 2).
130  substr($ADatum, 17, 2);
131 
132  return $timestamp;
133  }
134 
135 
140  function fdateDB2dateDE ($t)
141  {
142  return sprintf("%02d.%02d.%04d",substr($t, 8, 2),substr($t, 5, 2),substr($t, 0, 4));
143  }
144 
145 
151  {
152  return sprintf("%02d.%02d.%04d",substr($t, 6, 2),substr($t, 4, 2),substr($t, 0, 4));
153  }
154 
155 
161  {
162  return sprintf("%02d.%02d.%04d %02d:%02d:%02d",substr($t, 6, 2),substr($t, 4, 2),substr($t, 0, 4),substr($t, 8, 2),substr($t, 10, 2),substr($t, 12, 2));
163  }
164 
165 
171  {
172  return sprintf("%04d-%02d-%02d",substr($t, 0, 4),substr($t, 4, 2),substr($t, 6, 2));
173  }
174 
181  function ftimestamp2datetimeDB($aTimestamp)
182  {
183  $date = "";
184  if (preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $aTimestamp, $matches))
185  {
186  $date = "$matches[1]-$matches[2]-$matches[3] $matches[4]:$matches[5]:$matches[6]";
187  }
188  return $date;
189  }
190 
191 
199  function compareDates ($ADate1,$ADate2)
200  {
201  if ($ADate1 > $ADate2)
202  {
203  return $ADate1;
204  }
205 
206  return $ADate2;
207  }
208 
209 
214  function checkDecimal ($var)
215  {
216  return doubleval(ereg_replace (",",".",$var));
217  }
218 
219 
223  function fGeld ()
224  {
225  $num_args = func_num_args();
226 
227  $geld = func_get_arg(0);
228 
229  if ($num_args == 1)
230  {
231  $test = intval($geld);
232 
233  if (!$test)
234  return "&nbsp;";
235  }
236 
237  return number_format($geld,2,",",".")." &euro;";
238  }
239 
240 
245  function fProzent ()
246  {
247  $num_args = func_num_args();
248 
249  $prozent = func_get_arg(0);
250 
251  if ($num_args == 1)
252  {
253  $test = intval($prozent);
254 
255  if (!$test)
256  return "&nbsp;";
257  }
258 
259  return number_format($prozent,2,",",".")."%";
260  }
261 
266  function runden ($value)
267  {
268  return round($value * 100) / 100;
269  }
270 
288  public static function fmtDateTime($a_str,$a_dateformat,$a_timeformat,$a_mode = "datetime", $a_relative = TRUE)
289  {
290  //no format defined. set to default format
291  if ($a_dateformat == "")
292  {
293  $a_dateformat = "Y-m-d";
294  }
295 
296  // same for time format
297  if ($a_timeformat == "")
298  {
299  $a_timeformat = "H:i:s";
300  }
301 
302  // The sql-date 0000-00-00 00:00:00 means "no-date given"
303  if ($a_str == '0000-00-00 00:00:00')
304  {
305  global $lng;
306  return $lng->txt('no_date');
307  }
308  //
309  //get values from given sql-date
310  $d = substr($a_str,8,2);
311  $m = substr($a_str,5,2);
312  $y = substr($a_str,0,4);
313  $h = substr($a_str,11,2);
314  $i = substr($a_str,14,2);
315  $s = substr($a_str,17,4);
316 
317  // Minimum date is 1.1.1970
318  if(($y < 1970) or
319  ($y == 1970 and ($m < 1 or $d < 1)))
320  {
321  $y = 1970;
322  $m = 1;
323  $d = 2;
324  $h = $i = $s = 0;
325  }
326 
327  if ($a_mode == "time")
328  {
329  return date($a_timeformat,mktime($h,$i,$s,1,1,1999));
330  }
331 
332  // BEGIN WebDAV: Display relative date.
333  $timestamp = mktime($h,$i,$s,$m,$d,$y);
334  $now = time();
335  $minuteswest = gettimeofday(false);
336  $minuteswest = $minuteswest['minuteswest'];
337  $today = $now - $now % (24 * 60 * 60) + $minuteswest * 60;
338  $isToday = $today <= $timestamp && $timestamp < $today + 24 * 60 * 60;
339  $isYesterday = $today - 24 * 60 * 60 <= $timestamp && $timestamp < $today;
340  $isTomorrow = $today + 24 * 60 * 60 <= $timestamp && $timestamp < $today + 48 * 60 * 60;
341 
342  global $lng;
343  if ($a_relative)
344  {
345  $date = ($isToday) ? $lng->txt('today') :
346  (($isYesterday) ? $lng->txt('yesterday') :
347  (($isTomorrow) ? $lng->txt('tomorrow') :
348  date($a_dateformat,mktime($h,$i,$s,$m,$d,$y))))
349  ;
350  }
351  else
352  {
353  $date = date($a_dateformat,mktime($h,$i,$s,$m,$d,$y));
354  }
355 
356  return ($a_mode == "date") ? $date : $date.' '.date($a_timeformat,mktime($h,$i,$s,$m,$d,$y));
357  // END WebDAV: Display relative date.
358  }
359 
373  function fmtFloat($a_float, $a_decimals=0, $a_dec_point = null, $a_thousands_sep = null, $a_suppress_dot_zero=false)
374  {
375  global $lng;
376 
377 
378  if ($a_dec_point == null)
379  {
380  $a_dec_point = $lng->txt('lang_sep_decimal');
381  {
382  $a_dec_point = ".";
383  }
384  }
385  if ($a_dec_point == '-lang_sep_decimal-')
386  {
387  $a_dec_point = ".";
388  }
389 
390  if ($a_thousands_sep == null)
391  {
392  $a_thousands_sep = $lng->txt('lang_sep_thousand');
393  {
394  $a_th = ",";
395  }
396  }
397  if ($a_thousands_sep == '-lang_sep_thousand-')
398  {
399  $a_thousands_sep = ",";
400  }
401 
402  $txt = number_format($a_float, $a_decimals, $a_dec_point, $a_thousands_sep);
403 
404  // remove trailing ".0"
405  if (($a_suppress_dot_zero == 0 || $a_decimal == 0) &&
406  substr($txt,-2) == $a_dec_point.'0')
407  {
408  $txt = substr($txt, 0, strlen($txt) - 2);
409  }
410  if ($a_float == 0 and $txt == "")
411  {
412  $txt = "0";
413  }
414  return $txt;
415  }
416 
417  function unixtimestamp2datetime($a_unix_timestamp = "")
418  {
419  if (strlen($a_unix_timestamp) == 0)
420  {
421  return strftime("%Y-%m-%d %H:%M:%S");
422  }
423  else
424  {
425  return strftime("%Y-%m-%d %H:%M:%S", $a_unix_timestamp);
426  }
427  }
428 
440  function formatDate($a_date,$a_mode = "datetime", $a_omit_seconds = false, $a_relative = TRUE)
441  {
442  global $lng;
443 
444  // return when no datetime is given
445  if ($a_date == "0000-00-00 00:00:00")
446  {
447  return $lng->txt("no_date");
448  }
449 
450  $dateformat = $lng->txt("lang_dateformat");
451  if ($a_omit_seconds && ($lng->txt("lang_timeformat_no_sec") != "-lang_timeformat_no_sec-"))
452  {
453  $timeformat = $lng->txt("lang_timeformat_no_sec");
454  }
455  else
456  {
457  $timeformat = $lng->txt("lang_timeformat");
458  }
459 
460  if ($dateformat == "-lang_dateformat-")
461  {
462  $dateformat = "";
463  }
464 
465  if ($timeformat == "-lang_timeformat-")
466  {
467  $timeformat = "";
468  }
469 
470  return ilFormat::fmtDateTime($a_date,$dateformat,$timeformat,$a_mode, $a_relative);
471  }
472 
473  function formatUnixTime($ut,$with_time = false)
474  {
475  global $lng;
476 
477  $format = $lng->txt('lang_dateformat');
478 
479  if($with_time)
480  {
481  $format .= (' '.$lng->txt('lang_timeformat_no_sec'));
482  }
483  return date($format,$ut);
484  }
485  /*
486  * calculates the difference between 2 unix timestamps and
487  * returns a proper formatted output
488  *
489  * @param integer unix timestamp1
490  * @param integer unix timestamp2
491  * @return string time difference in hh:mm:ss
492  */
493  function dateDiff($a_ts1,$a_ts2)
494  {
495  $r = $a_ts2 - $a_ts1;
496 
497  $dd = floor($r/86400);
498 
499  if ($dd <= 9)
500  $dd = "0".$dd;
501 
502  $r = $r % 86400;
503 
504  $hh = floor($r/3600);
505 
506  if ($hh <= 9)
507  $hh = "0".$hh;
508 
509  $r = $r % 3600;
510 
511  $mm = floor($r/60) ;
512 
513  if ($mm <= 9)
514  $mm = "0".$mm;
515 
516  $r = $r % 60;
517  $ss = $r;
518 
519  if ($ss <= 9)
520  $ss = "0".$ss;
521 
522  return $hh.":".$mm.":".$ss;
523  }
524 
531  function datetime2unixTS($a_datetime)
532  {
533  $arrDT = explode(" ", $a_datetime);
534  $arrD = explode("-", $arrDT[0]);
535  $arrT = explode(":", $arrDT[1]);
536 
537  return mktime($arrT[0], $arrT[1], $arrT[2], $arrD[1], $arrD[2], $arrD[0]);
538  }
539 
547  function _secondsToString($seconds, $force_with_seconds = false)
548  {
549  global $lng;
550 
551  $seconds = $seconds ? $seconds : 0;
552 
553  global $lng;
554 
555  $days = floor($seconds / 86400);
556  $rest = $seconds % 86400;
557 
558  $hours = floor($rest / 3600);
559  $rest = $rest % 3600;
560 
561  $minutes = floor($rest / 60);
562  $seconds = $rest % 60;
563 
564  if($days)
565  {
566  $message = $days . ' '. $lng->txt('days');
567  }
568  if($hours)
569  {
570  if($message)
571  {
572  $message .= ' ';
573  }
574  $message .= ($hours . ' '. $lng->txt('hours'));
575  }
576  if($minutes)
577  {
578  if($message)
579  {
580  $message .= ' ';
581  }
582  $message .= ($minutes . ' '. $lng->txt('minutes'));
583  }
584  if($force_with_seconds && $seconds)
585  {
586  if($message)
587  {
588  $message .= ' ';
589  }
590  $message .= ($seconds . ' '. $lng->txt('seconds'));
591  }
592  if(!$days and !$hours and !$minutes)
593  {
594  return $seconds .' '. $lng->txt('seconds');
595  }
596  else
597  {
598  return $message;
599  }
600  }
608  function _secondsToShortString($seconds)
609  {
610  global $lng;
611 
612  $seconds = $seconds ? $seconds : 0;
613 
614  global $lng;
615 
616  $days = floor($seconds / 86400);
617  $rest = $seconds % 86400;
618 
619  $hours = floor($rest / 3600);
620  $rest = $rest % 3600;
621 
622  $minutes = floor($rest / 60);
623  $rest = $rest % 60;
624 
625  return sprintf("%02d:%02d:%02d:%02d",$days,$hours,$minutes,$rest);
626 
627  }
628 
634  static function _getLocalMoneyFormat($float_number)
635  {
636  global $ilias;
637 
638  $language = $ilias->getSetting("language");
639  $money_locale = $language.'_'.strtoupper($language);
640  /* de_DE en_US en_EN fr_FR .UTF-8
641  */ //$money_locale = 'de_DE.UTF-8';
642  //vd($_SERVER['HTTP_ACCEPT_LANGUAGE']);
643 
644  setlocale(LC_MONETARY, $money_locale);
645  return $float_number;
646  //return money_format('%!2n', $float_number);
647  }
648 
661  public static function _getSizeMagnitude()
662  {
663  return 1024;
664  }
672  public static function formatFloat($size, $a_decimals, $a_suppress_dot_zero=false, $a_mode = 'short', $a_lng = null)
673  {
674  global $lng;
675  if ($a_lng == null) {
676  $a_lng = $lng;
677  }
678  return self::fmtFloat($size, $a_decimals, $a_lng->txt('lang_sep_decimal'), $a_lng->txt('lang_sep_thousand', $a_suppress_dot_zero), true).' '.$a_lng->txt($scaled_unit);
679  }
696  public static function formatSize($size, $a_mode = 'short', $a_lng = null)
697  {
698  global $lng;
699  if ($a_lng == null) {
700  $a_lng = $lng;
701  }
702 
703  require_once 'classes/class.ilFormat.php';
704 
705  $result;
706  $mag = self::_getSizeMagnitude();
707 
708  $scaled_size;
709  $scaled_unit;
710 
711  if ($size >= $mag * $mag * $mag)
712  {
713  $scaled_size = $size/$mag/$mag/$mag;
714  $scaled_unit = 'lang_size_gb';
715  }
716  else if ($size >= $mag * $mag)
717  {
718  $scaled_size = $size/$mag/$mag;
719  $scaled_unit = 'lang_size_mb';
720  }
721  else if ($size >= $mag)
722  {
723  $scaled_size = $size/$mag;
724  $scaled_unit = 'lang_size_kb';
725  }
726  else
727  {
728  $scaled_size = $size;
729  $scaled_unit = 'lang_size_bytes';
730  }
731 
732  $result = self::fmtFloat($scaled_size,($scaled_unit == 'lang_size_bytes') ? 0:1, $a_lng->txt('lang_sep_decimal'), $a_lng->txt('lang_sep_thousand'), true).' '.$a_lng->txt($scaled_unit);
733  if ($a_mode == 'long' && $size > $mag)
734  {
735  $result .= ' ('.
736  self::fmtFloat($size,0,$a_lng->txt('lang_sep_decimal'),$a_lng->txt('lang_sep_thousand')).
737  ' '.$a_lng->txt('lang_size_bytes').')';
738  }
739  return $result;
740  }
741 }
742 
743 ?>