ght.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. function ght($ts,$fa=null,$sd=2,$bunit='years',$ozero=false) {
  3. /*
  4. $ts is seconds (can be float)
  5. if not null, $fa has to be an array defining the output suffixes, see below its default ;-)
  6. $sd is how many decimals to put after a dot after seconds (can be 0)
  7. $bunit is "from which unit to start counting"
  8. $ozero is whether to include a zero value for a unit
  9. */
  10. $bunits=['years', 'weeks', 'days', 'hours', 'minutes', 'seconds'];
  11. $cbunits=count($bunits);
  12. $obunit=$bunit;
  13. $bunit=array_search($bunit,$bunits,true);
  14. if ($bunit===false) {
  15. fwrite(STDERR,"Function «ght» was called with an unsupported «bunit» value: «{$obunit}».\n");
  16. $bunit=0;
  17. }
  18. $buniti=abs($bunit-$cbunits);
  19. if ($fa==null) $fa=['year','years','week','weeks','day','days','hour','hours','minute','minutes','second','seconds'];
  20. $sep=', ';
  21. $out='';
  22. $i=0;
  23. $osep='';
  24. // years
  25. if ($buniti>=6) {
  26. $x=floor($ts/31536000);
  27. if ($x>0 || $ozero)
  28. ($x==1) ? $out.=$x.' '.$fa[$i] : $out.=$x.' '.$fa[$i+1];
  29. $ts=$ts-$x*31536000;
  30. }
  31. $i+=2;
  32. // weeks
  33. if ($buniti>=5) {
  34. if ($out!='') $osep=$sep;
  35. $x=floor($ts/604800);
  36. if ($x>0 || $ozero)
  37. ($x==1) ? $out.=$osep.$x.' '.$fa[$i] : $out.=$osep.$x.' '.$fa[$i+1];
  38. $ts=$ts-$x*604800;
  39. }
  40. $i+=2;
  41. // days
  42. if ($buniti>=4) {
  43. if ($out!='') $osep=$sep;
  44. $x=floor($ts/86400);
  45. if ($x>0 || $ozero)
  46. ($x==1) ? $out.=$osep.$x.' '.$fa[$i] : $out.=$osep.$x.' '.$fa[$i+1];
  47. $ts=$ts-$x*86400;
  48. }
  49. $i+=2;
  50. // hours
  51. if ($buniti>=3) {
  52. if ($out!='') $osep=$sep;
  53. $x=floor($ts/3600);
  54. if ($x>0 || $ozero)
  55. ($x==1) ? $out.=$osep.$x.' '.$fa[$i] : $out.=$osep.$x.' '.$fa[$i+1];
  56. $ts=$ts-$x*3600;
  57. }
  58. $i+=2;
  59. // minutes
  60. if ($buniti>=2) {
  61. if ($out!='') $osep=$sep;
  62. $x=floor($ts/60);
  63. if ($x>0 || $ozero)
  64. ($x==1) ? $out.=$osep.$x.' '.$fa[$i] : $out.=$osep.$x.' '.$fa[$i+1];
  65. $ts=$ts-$x*60;
  66. }
  67. $i+=2;
  68. // seconds
  69. if ($buniti>=1) {
  70. if ($out!='') $osep=$sep;
  71. $x=round($ts,$sd);
  72. if ($x>0 || $ozero) {
  73. if ($sd>0 || $x!=1)
  74. $out.=$osep.$x.' '.$fa[$i+1];
  75. elseif ($x==1)
  76. $out.=$osep.$x.' '.$fa[$i];
  77. }
  78. }
  79. return $out;
  80. }
  81. ?>