CI 묻고 답하기

제목 시간 계산 관련...
글쓴이 다니엘SEO 작성시각 2012/06/07 09:49:34
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 17442   RSS
아래와 같은 유닉스 타임 값 두개가 있습니다.

//작업시작시간
$st = human_to_unix('2012-06-04 15:00:00');
//작업종료시간
$et = human_to_unix('2012-06-04 16:05:00');
종료 시간에서 시작시간을 뺍니다.
//작업시간계산
$work = $et - $st;
시간으로 표시하기 위해 나누기 3600합니다.
$work_h = $work/3600;
그러면 $work_h의 값은 1.0833333333333 이 나옵니다.

여기서 문제가 시작 됩니다...!!!;;;

1.0833333333333 값을 다시 00:00 식으로 바꿔줘야 하는데요...
아래와 같은 계산식을 사용했습니다.
preg_replace('/\.\d+/e',"':'.sprintf('d',$0*60)", $work_h).':00';

위의 공식들로 보면 01:05:00 이 나와야 하는데...01:04:00 이 나오네요...
뿐만 아니라 다른 시간 대에서도 계속 1분~3분씩 차이가 납니다ㅜㅜ

도와주세요 ㅠ.ㅠ
 다음글 $this ->function 사용 방법에 대해서 (4)
 이전글 hmvc에서 모듈 생성할 때 데이터를 넘겨줄려면? (2)

댓글

한대승(불의회상) / 2012/06/07 10:29:00 / 추천 0
그냥 머리쓰기 싫어서 간단하게 했습니다.

  $work = $et - $st;
  $h = intval($work / 3600);
  $m = intval(($work - $h * 3600) / 60);
  $s = $work - ($h * 3600 + $m * 60);
  
  echo sprintf('d:d.d',$h,$m,$s);

한대승(불의회상) / 2012/06/07 10:33:04 / 추천 0
삽집하고 메뉴얼을 뒤져 보니... ㅡㅡ;;
echo timespan($st, $et);
http://www.codeigniter-kr.org/user_guide_2.1.0/helpers/date_helper.html

포맷은 lang 팩을 손 보시면 될듯..
다니엘SEO / 2012/06/07 10:58:01 / 추천 0
 아...이런....
timespan 생각을 못했네요...역시...사람은 창의력이 ㅠ.ㅠ
이미 timespan을 한글로 바꿔서 다른곳에 사용하고 있으니...
따로 하나 만들어서 사용해야겠네요!!

감사합니다 ^^
변종원(웅파) / 2012/06/07 11:17:24 / 추천 0
불상님 초보처럼 왜 그러세요? ^^

1. 레퍼런스(매뉴얼)
2. 검색
한대승(불의회상) / 2012/06/07 11:23:25 / 추천 0
웅파// 그러게요.. 샘플 만들때 봤던 기억이 있엇는데... ㅡㅡ;;
변종원(웅파) / 2012/06/07 11:42:30 / 추천 0
불의회상/ 삼초병이신가요? ^^
한대승(불의회상) / 2012/06/07 12:01:18 / 추천 0
웅파// 일초병일지도.. ㅡㅡ;;
다니엘SEO / 2012/06/07 13:40:25 / 추천 0
아....잘 못 됐네요...ㅠ.ㅠ

1.0833333333333 라는 숫자 자체를 00:00:00 으로 만들어 줘야 하는 문제였습니다...;;;
그래서 자꾸 시간이 틀어 지고 있구요...ㅜㅜ
한대승(불의회상) / 2012/06/07 13:56:36 / 추천 0
ㅎㅎㅎ 잘 이해가 안가는데요. ^^
다니엘SEO / 2012/06/07 14:04:56 / 추천 0
DB에 저장 되는 값이

$work = $et - $st;
$work_term = $work / 3600;
해서 나온 1.0833333333333 라는 값을 1.08식으로 저장합니다.
출력 화면에는 "총 작업 시간: 1.08시간" 식으로 표시하고 있구요.

이 1.08이라는 값을 가지고 다시 00:00:00 식으로 만들어 줘야 하는데...시간이 조금씩 틀어지더라 하는 문제였죠 ㅠ.ㅠ


한대승(불의회상) / 2012/06/07 14:12:27 / 추천 0
ㅎㅎㅎㅎ 그런거군요..
round($work_h * 3600, 0);
로 해결 가능할듯.. ^^

제가 첨에 삽질한 코드하고 같이 쓰세요. ^^