PageRenderTime 56ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/baser/views/helpers/bc_time.php

https://github.com/hashing/basercms
PHP | 301 lines | 162 code | 29 blank | 110 comment | 41 complexity | 47cc35f584b264353eabf60b2de625dd MD5 | raw file
Possible License(s): MIT
  1. <?php
  2. /* SVN FILE: $Id$ */
  3. /**
  4. * Timeヘルパー拡張
  5. *
  6. * PHP versions 5
  7. *
  8. * baserCMS : Based Website Development Project <http://basercms.net>
  9. * Copyright 2008 - 2012, baserCMS Users Community <http://sites.google.com/site/baserusers/>
  10. *
  11. * @copyright Copyright 2008 - 2012, baserCMS Users Community
  12. * @link http://basercms.net baserCMS Project
  13. * @package baser.view.helpers
  14. * @since baserCMS v 0.1.0
  15. * @version $Revision$
  16. * @modifiedby $LastChangedBy$
  17. * @lastmodified $Date$
  18. * @license http://basercms.net/license/index.html
  19. */
  20. /**
  21. * Include files
  22. */
  23. App::import("Helper","time");
  24. /**
  25. * Timeヘルパー拡張
  26. *
  27. * @package baser.views.helpers
  28. */
  29. class BcTimeHelper extends TimeHelper {
  30. /**
  31. * 年号リスト
  32. *
  33. * @var array
  34. * @access public
  35. */
  36. var $nengos = array("m"=>"明治","t"=>"大正","s"=>"昭和","h"=>"平成");
  37. /**
  38. * 年号を取得
  39. *
  40. * @param string $w
  41. * @return string 年号をあらわすアルファベット
  42. * @access public
  43. */
  44. function nengo($w) {
  45. if(isset($this->nengos[$w])) {
  46. return $this->nengos[$w];
  47. } else {
  48. return false;
  49. }
  50. }
  51. /**
  52. * 和暦を取得(アルファベット)
  53. *
  54. * @param string $date 和暦を表す日付文字列(s-48/5/10)
  55. * @return mixid string / false
  56. * @access public
  57. */
  58. function wareki($date) {
  59. $_date = split('/', $date);
  60. if(!$_date) {
  61. $_date = split('-', $date);
  62. }
  63. if(count($_date)==3) {
  64. $wyear = split('-',$_date[0]);
  65. if(isset($wyear[0])) {
  66. return $wyear[0];
  67. } else {
  68. return false;
  69. }
  70. } elseif(count($_date)==4) {
  71. return $_date[0];
  72. } else {
  73. return false;
  74. }
  75. }
  76. /**
  77. * 和暦の年を取得
  78. *
  79. * @param string $date 和暦を表す日付文字列(s-48/5/10)
  80. * @return mixid int / false
  81. * @access public
  82. */
  83. function wyear($date) {
  84. $_date = split('/', $date);
  85. if(!$_date) {
  86. $_date = split('-', $date);
  87. }
  88. if(count($_date)==3) {
  89. $wyear = split('-',$_date[0]);
  90. if(isset($wyear[1])) {
  91. return $wyear[1];
  92. } else {
  93. return false;
  94. }
  95. } elseif(count($_date)==4) {
  96. return $_date[1];
  97. } else {
  98. return false;
  99. }
  100. }
  101. /**
  102. * 西暦を和暦の年に変換する
  103. * 西暦をまたがる場合があるので配列で返す
  104. *
  105. * @param int $year
  106. * @return array
  107. * @access public
  108. */
  109. function convertToWarekiYear($year) {
  110. if($year >= 1868 && $year <= 1911) {
  111. return array('m-'.($year-1867));
  112. } elseif ($year == 1912) {
  113. return array('m-'.($year-1867),'t-'.($year-1911));
  114. } elseif ($year >= 1913 && $year <= 1925) {
  115. return array('t-'.($year-1911));
  116. } elseif ($year == 1926) {
  117. return array('t-'.($year-1911), 's-'.($year-1925));
  118. } elseif ($year >= 1927 && $year <= 1988) {
  119. return array('s-'.($year-1925));
  120. } elseif ($year == 1989) {
  121. return array('s-'.($year-1925), 'h-'.($year-1988));
  122. } elseif ($year >= 1990) {
  123. return array('h-'.($year-1988));
  124. } else {
  125. return false;
  126. }
  127. }
  128. /**
  129. * 和暦の年を西暦に変換する
  130. * 和暦のフォーマット例:s-48
  131. *
  132. * @param string $year
  133. * @return int
  134. * @access public
  135. */
  136. function convertToSeirekiYear($year) {
  137. if(strpos($year, '-')===false) {
  138. return false;
  139. }
  140. list($w,$year) = split('-', $year);
  141. switch ($w) {
  142. case 'm':
  143. return $year + 1867;
  144. break;
  145. case 't':
  146. return $year + 1911;
  147. break;
  148. case 's':
  149. return $year + 1925;
  150. break;
  151. case 'h':
  152. return $year + 1988;
  153. break;
  154. default:
  155. return false;
  156. }
  157. }
  158. /**
  159. * 和暦変換(配列で返す)
  160. *
  161. * @param string 日付
  162. * @return array 和暦データ
  163. * @access public
  164. */
  165. function convertToWarekiArray($date) {
  166. if(!$date) {
  167. return '';
  168. } elseif(is_array($date)) {
  169. if(!empty($date['year']) && !empty($date['month']) && !empty($date['day'])) {
  170. $date = $date['year'].'-'.$date['month'].'-'.$date['day'];
  171. } else {
  172. return '';
  173. }
  174. }
  175. if(strtotime($date)==-1) {
  176. return '';
  177. }
  178. $ymd = date('Ymd',strtotime($date));
  179. $y = date('Y',strtotime($date));
  180. $m = date('m',strtotime($date));
  181. $d = date('d',strtotime($date));
  182. if ($ymd <= "19120729") {
  183. $w = "m";
  184. $y = $y - 1867;
  185. } elseif ($ymd >= "19120730" && $ymd <= "19261224") {
  186. $w = "t";
  187. $y = $y - 1911;
  188. } elseif ($ymd >= "19261225" && $ymd <= "19890107") {
  189. $w = "s";
  190. $y = $y - 1925;
  191. } elseif ($ymd >= "19890108") {
  192. $w = "h";
  193. $y = $y - 1988;
  194. }
  195. $dataWareki = array(
  196. 'wareki' => true,
  197. 'year' => $w.'-'.$y,
  198. 'month' => $m,
  199. 'day' => $d
  200. );
  201. return $dataWareki;
  202. }
  203. /**
  204. * 和暦変換
  205. *
  206. * @param string $date 日付
  207. * @return string 和暦データ
  208. * @access public
  209. */
  210. function convertToWareki($date) {
  211. $dateArray = $this->convertToWarekiArray($date);
  212. if(is_array($dateArray) && !empty($dateArray)) {
  213. return $dateArray['year'] . '/' . $dateArray['month'] . '/' . $dateArray['day'];
  214. } else {
  215. return '';
  216. }
  217. }
  218. /**
  219. * 文字列から時間(分)を取得
  220. *
  221. * @param string $strDate 日時
  222. * @return mixed 分/null
  223. * @access public
  224. */
  225. function minutes($strDate) {
  226. $time = strtotime($strDate,0);
  227. $minutes = $time / 60;
  228. if($minutes) {
  229. return $minutes . '分';
  230. }else {
  231. return null;
  232. }
  233. }
  234. /**
  235. * format 拡張
  236. *
  237. * @param array $format
  238. * @param string $date String Datetime string
  239. * @param boolean $invalid flag to ignore results of fromString == false
  240. * @param int $userOffset User's offset from GMT (in hours)
  241. * @return string Formatted date string
  242. * @access public
  243. */
  244. function format($format = 'Y-m-d', $date = null, $invalid = false, $userOffset = null) {
  245. if($date != "00:00:00" && (!$date||$date === 0||$date=='0000-00-00 00:00:00')) {
  246. return "";
  247. }
  248. return parent::format($format,$date,$invalid,$userOffset);
  249. }
  250. /**
  251. * 指定した日数が経過しているか確認する
  252. * 経過していない場合はtrueを返す
  253. * 日付が確認できなかった場合もtrueを返す
  254. *
  255. * @param string $date 日付
  256. * @param int $days 経過日数
  257. * @return boolean 経過有無
  258. * @access public
  259. */
  260. function pastDays($date,$days) {
  261. if(!$date) return true;
  262. $pastDate = strtotime($date);
  263. if(!$pastDate) return true;
  264. $_days = $days * 60 * 60 * 24;
  265. if(time() > ($pastDate + $_days)) {
  266. return true;
  267. }else {
  268. return false;
  269. }
  270. }
  271. }
  272. ?>