fork download
  1. <?php
  2. /*
  3.   http://q...content-available-to-author-only...e.jp/1377925282
  4. */
  5. $day = array(
  6. '2013-08-30',
  7. '2013-08-31',
  8. '2013-09-01',
  9. '2013-09-02',
  10. '2013-09-05',
  11. '2013-09-06',
  12. '2013-09-10',
  13. '2013-09-30',
  14. '2013-10-01',
  15. '2013-10-02',
  16. '2014-01-01',
  17. '2014-12-30',
  18. '2014-12-31',
  19. '2015-01-01',
  20. );
  21.  
  22. function format_date($t, $prev) {
  23. $local_t = localtime($t, true);
  24. $local_prev = localtime($prev, true);
  25. $fmt = 'Y年n月j日';
  26. if ($local_t['tm_year'] == $local_prev['tm_year']) {
  27. $fmt = 'n月j日';
  28. if ($local_t['tm_mon'] == $local_prev['tm_mon']) {
  29. $fmt = 'j日';
  30. }
  31. }
  32. return date($fmt, $t);
  33. }
  34.  
  35.  
  36. $t_prev = strtotime($day[0]);
  37. $t_start = $t_end = $t_prev;
  38. $t_end_prev = strtotime("1970-4-1");
  39. $output = '';
  40. $sep = '';
  41.  
  42. $n = count($day);
  43. for ($i = 1 ; $i <= $n ; $i++) {
  44. if ($i != $n) {
  45. $t = strtotime($day[$i]);
  46. $diff = $t - $t_prev;
  47. if ($diff == 24*60*60) {
  48. $t_end = $t;
  49. $t_prev = $t;
  50. continue;
  51. }
  52. }
  53.  
  54. $output .= $sep . format_date($t_start, $t_end_prev);
  55. if ($t_start != $t_end) {
  56. $output .= '~' . format_date($t_end, $t_start);
  57. }
  58.  
  59. $t_end_prev = $t_end;
  60. $t_start = $t_end = $t;
  61. $t_prev = $t;
  62. $sep = '、';
  63. }
  64.  
  65. echo $output;
  66.  
  67. ?>
  68.  
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
2013年8月30日~9月2日、5日~6日、10日、30日~10月2日、2014年1月1日、12月30日~2015年1月1日