php2012. 10. 17. 16:52

글 목록을 보여줄 때 현재 시간으로 보여주는 경우도 많지만 많은 SNS에서 지금으로부터 얼마 전에 써진 글인지 표시해주는 경우도 많습니다.
이런 경우에 사용할 수 있는 함수 예제입니다.

function readableTime($datetime) {
  $sec = time() - strtotime($datetime);
  if($sec < 60) return $time . '초';
  $min = $sec / 60;
  if($min < 60) return intval($min) . '분';
  $hour = $min / 60;
  if($hour < 24) return intval($hour) . '시간';
  $day = $hour / 24;
  if($day < 7) return intval($day) . '일';
  $week = $day / 7;
  if($time < 5) return intval($week) . '주';
  $month = $day / 30;
  if($month < 24) return intval($month) . '개월';
  $year = $day / 365;
  return intval($year) . '년';
}

Posted by 다오나무
영삼이의 IT정보2012. 6. 19. 15:34

NSDate는 순수하게 시각값을 가진 오브젝트
실제로 그냥 출력을 하면 UTC(협정시)의 형태를 보여준다.

NSLog( @"%@", [ NSDate date ] ); -> 2012-06-11 08:02:34 +0000

시각값을 가지고 작업을 할 때에는 Time Zone 문제가 항상 존재하는데, NSDate 하나로는 해결하기 힘들다.

이때 시각값에 특정 포멧을 넣어 작업을 하기 위해서는 NSDateFormatter라는 것이 필요하다.

밑의 그림은 연습 프로그램의 일부이다.

NSDateFormatter의 메소드인 setTimeZone,  setDateFormat
setTimeZone은 특정 Time Zone을 설정할 수 있다.
setDateFormat은 표현하고자 하는 시각 포멧을 설정할 수 있다.

setDateFormat에서 설정할 수 있는 포멧은 잘 검색해 보길 바라고...
setTimeZone을 통해 정할 수 있는 NSTimeZone에 대해서 조금 더 설명해 보겠다.

NSTimeZone의 메소드 중 timeZoneWithName:( NSString * )을 사용했다. ( 위 소스에서 strCurRegion 부분 )
여기에서 NSString에 들어가는 텍스트가 중요한데, 내가 확인한 바로는 416개가 존재했다.
몽땅 여기에 써 넣을 수도 있겠지만, 직접 확인해보길...

해당 텍스트는 NSLog( @"%@", [ NSTimeZone knownTimeZoneNames ] )를 통해 알 수 있다.
결과값은 NSArray 이므로 쓰기 쉬울 것이다.


우리나라에서 표준시로 쓰고 있는 GMT+0900은 "Asia/Seoul"로 표현되어 있다.
"Asia/Tokyo"로 써도 똑같다는 것은 비☆밀 -ㅅ-;



또한 NSDateFormatter로 각각의 시각 성분을 뽑아낼 수도 있다.

이런식으로 각각의 성분을 뽑아서 따로 사용할 수도 있다. 


특정 시각을 설정하고 싶을 때에는 NSDateComponents를 사용한다.

또 여기에서 NSCalendar가 나오는데 이건 나도 자세히는 모르겠다...
아무튼 이런식으로 특정 시각 값을 가진 NSDate 오브젝트를 얻을 수 있다.


마지막으로 NSDateFormatter에서 dateFromString이라는 메소드가 있는데, 2012-06-11 08:02:34 +0000 이러한 텍스트를 넣어주면 
그에 따른 시각값을 가진 NSDate 오브젝트를 얻을 수 있다.


시각 값 조작하는 코드가 너무 많은 것 같아서 조금 헛갈리는데, 나는 이 정도로만 사용할 것이다.

NSDate의 메소드 중에는 timeIntervalSince... 시리즈가 있는데, 타이머에 사용할 시간이나, 두 시각 값 사이의 차이 시간이라든지 여러가지로 활용할 부분이 많을 것이다.

Posted by 다오나무
영삼이의 IT정보2012. 6. 1. 16:18

- (void)myStringExample

{

    // 파일명에서 확장자 얻기

    NSString *fileName = @"somefile.txt";

    NSString *fileExtension = [fileName pathExtension];

    

    // 공백문자 없애기

    NSString *myString = @" one two three ";

    NSString *trimed = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    

    NSString *string1 = @"some string";

    NSString *string2 = @"some other string";

    NSString *string3 = @"Some StRiNg";

    NSString *string4 = @"some other string";

    

    // 문자열 비교

    NSLog(@"%i",[string2 isEqualToString:string4]);

    NSLog(@"%i",[string1 isEqualToString:string3]);

    NSLog(@"%i",([string1 caseInsensitiveCompare:string3] == NSOrderedSame));

    

    // 스트링을 double, int값으로 변경하기 

    NSString *n = @"12345";

    double d = [n doubleValue];

    int i = [n intValue];

    NSLog(@"%f, %d",d,i);

    

    // URL에서 HTML얻기

    NSURL *url = [NSURL URLWithString:@"http://google.com"];

    NSString *pageContents = [NSString stringWithContentsOfURL:url];

    

    NSLog(@"%@", pageContents);

    

    // 숫자 변경

    NSString *numberString = @"one two three";

    NSRange foundRange = [numberString rangeOfString:@"two"];

    NSString *oneString = [numberString substringToIndex:3];

    NSString *twoString = [numberString substringWithRange:NSMakeRange(43)];

    NSString *threeString = [numberString substringFromIndex:8];

    

    NSString *repeatString = [numberString 

                              stringByReplacingOccurrencesOfString:@"three" withString:@"four"];

    BOOL found = ([numberString rangeOfString:@"two1"].location != NSNotFound);

    

    NSString *stringa = @"one";

    NSString *stringb = [stringa stringByAppendingString:@" two"];

    

    NSLog(@"%i - %i",foundRange.location, foundRange.length);

    NSLog(@"%@",repeatString);

    NSLog(@"[%@] [%@] [%@]",oneString,twoString,threeString);

    NSLog(@"%@",[numberString componentsSeparatedByString:@" "]);

}


- (void)myDateExample

{

    // 현재 날짜시간 얻기

    NSDate *myDate = [NSDate date];

    NSLog(@"%@", myDate);

    

    // 다음 날짜 얻기(초를 기반한 interval 계산)

    NSTimeInterval secondsPerDay = 24*60*60;

    NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

    NSLog(@"%@", tomorrow);

    

    // 이전 날짜 얻기

    NSDate *now = [NSDate date];

    NSDate *yesterday = [now addTimeInterval:-secondsPerDay];

    NSLog(@"%@", yesterday);

    

    // 날짜 차이 얻기

    NSTimeInterval secondsBetweenDates = [yesterday timeIntervalSinceDate:now];

    NSLog(@"%@", secondsBetweenDates);


    NSDateComponents *comp = [[NSDateComponents allocinit];

    [comp setMonth:06];

    [comp setDay:01];

    [comp setYear:2010];

    NSCalendar *myCal = [[NSCalendar allocinitWithCalendarIdentifier:NSGregorianCalendar];

    NSDate *myDate2 = [myCal dateFromComponents:comp];

    

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    NSString *friendlyDate = [formatter stringFromDate:now];

    

    NSLog(@"%@", friendlyDate);

    

    [formatter setDateFormat:@"yyyy-mm-dd"];

    NSString *friendlyDate2 = [formatter stringFromDate:now];

    

    NSLog(@"%@", friendlyDate2);

    

}


- (void)myArrayExample 

{

    NSString *string1 = @"one";

    NSString *string2 = @"two";

    NSString *string3 = @"three";

    

    NSArray *myArray = [NSArray arrayWithObjects:string1, string2, string3, nil];

    

    // Array 복사

    NSArray *myArray2 = [NSArray arrayWithArray:myArray];

    

    // 범위를 지정해서 Array 복사

    NSRange range = NSMakeRange(02);

    NSArray *subArray = [myArray subarrayWithRange:range];

    

    int arrayLength = [myArray count];

    NSLog(@"%d", arrayLength);

    

    int arrayLength2 = [subArray count];

    NSLog(@"%d", arrayLength2);



    // 루프를 출력

    for (NSString *obj in myArray) {

        NSLog(@"%@", obj);

    }

    

    // 루프를 거꾸로 출력

    for (NSString *obj2 in [myArray reverseObjectEnumerator]) {

        NSLog(@"%@", obj2);

    }

    

    // 정렬

    [myArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

    

}


- (void)myDictionaryExample 

{

    NSArray *arr1 = [NSArray arrayWithObjects:@"iPhone"@"iPod"nil];

    NSArray *arr2 = [NSArray arrayWithObjects:@"iMac"@"Mac Pro"@"Macbook"@"Macbook Pro"nil];

    

    //  부분에서 오류가 

    NSDictionary *myDict = [[NSDictionary allocdictionaryWithObjectsAndKeys:arr1, @"mobile", arr2, @"computers"nil];

    

    int dictSize = [myDict count];

    NSLog(@"%d", dictSize);

    

}


- (void)myNotificationExample

{

    // Notification 등록

    [[NSNotificationCenter defaultCenteraddObserver:self selector:@selector(doSomething:) name:MY_NOTIFICATION object:nil];

    

    // Notification 호출

    [[NSNotificationCenter defaultCenterpostNotificationName:MY_NOTIFICATION object:nil];

    

}


- (void)doSomething:(NSNotification *) aNote 

{

    NSLog(@"doSomething called...");

    

    // 만약 aNote 통해서 뭔가 전달되었다면

    // [aNote object] 받아서 처리함

    

}


- (void)myTimerExample 

{

    // 타이머 생성

    //NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(myTimerAction:) userInfo:nil repeats:NO];

    

    //[myTimer invalidate];

    // 하루의   

    NSTimeInterval secondsPerDay = 24*60*60;

    NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

    NSTimer *myTimer = [[NSTimer allocinitWithFireDate:tomorrow interval:10.0 target:self selector:@selector(myTimerAction) userInfo:nil repeats:NO];

    

    [[NSRunLoop mainRunLoopaddTimer:myTimer forMode:NSDefaultRunLoopMode];

    

}


Posted by 다오나무