시간과 날짜
CodeIgniter는 PHP의 DateTimeImmutable 클래스를 기반으로 하는 완전히 로케일화된 불변 날짜/시간 클래스를 제공합니다. 이 클래스는 Intl 확장의 기능을 사용하여 타임존 간 시간을 변환하고 다양한 로케일에 맞게 출력을 올바르게 표시합니다. 이 클래스는 Time 클래스이며 CodeIgniter\I18n 네임스페이스에 있습니다.
참고
Time 클래스는 DateTimeImmutable을 확장하므로, 이 클래스가 제공하지 않는 기능이 필요하다면 DateTimeImmutable 클래스 자체에서 찾을 수 있을 것입니다.
참고
v4.3.0 이전에는 Time 클래스가 DateTime을 확장했으며 일부 상속된 메서드가 현재 객체 상태를 변경했습니다. 이 버그는 v4.3.0에서 수정되었습니다. 하위 호환성을 위해 이전 Time 클래스가 필요하다면 당분간 더 이상 사용되지 않는 TimeLegacy 클래스를 사용할 수 있습니다.
인스턴스화
새 Time 인스턴스를 생성하는 방법은 여러 가지가 있습니다. 첫 번째는 다른 클래스와 마찬가지로 단순히 새 인스턴스를 생성하는 것입니다.
이 방법을 사용하면 원하는 시간을 나타내는 문자열을 전달할 수 있습니다. PHP의 DateTimeImmutable 생성자가 파싱할 수 있는 모든 문자열을 사용할 수 있습니다. 자세한 내용은 Supported Date and Time Formats를 참조하세요.
<?php
use CodeIgniter\I18n\Time;
$myTime = new Time('2024-01-01');
$myTime = new Time('2024-01-01 12:00:00');
$myTime = new Time('now');
$myTime = new Time('+3 week');
두 번째와 세 번째 매개변수에 각각 타임존과 로케일을 나타내는 문자열을 전달할 수 있습니다. 타임존은 PHP의 DateTimeZone 클래스가 지원하는 모든 타임존을 사용할 수 있습니다. 로케일은 PHP의 Locale 클래스가 지원하는 모든 로케일을 사용할 수 있습니다. 로케일이나 타임존이 제공되지 않으면 애플리케이션 기본값이 사용됩니다.
<?php
use CodeIgniter\I18n\Time;
$myTime = new Time('now', 'America/Chicago', 'en_US');
now()
Time 클래스는 클래스를 인스턴스화하는 여러 헬퍼 메서드를 가지고 있습니다. 첫 번째는 현재 시간으로 설정된 새 인스턴스를 반환하는 now() 메서드입니다. 두 번째와 세 번째 매개변수에 각각 타임존과 로케일을 나타내는 문자열을 전달할 수 있습니다. 로케일이나 타임존이 제공되지 않으면 애플리케이션 기본값이 사용됩니다.
<?php
use CodeIgniter\I18n\Time;
$myTime = Time::now('America/Chicago', 'en_US');
parse()
이 헬퍼 메서드는 기본 생성자의 정적 버전입니다. DateTimeImmutable의 생성자에 사용 가능한 문자열을 첫 번째 매개변수로, 타임존을 두 번째 매개변수로, 로케일을 세 번째 매개변수로 받습니다:
<?php
use CodeIgniter\I18n\Time;
$myTime = Time::parse('next Tuesday', 'America/Chicago', 'en_US');
today()
날짜를 현재 날짜로, 시간을 자정으로 설정한 새 인스턴스를 반환합니다. 첫 번째와 두 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$myTime = Time::today('America/Chicago', 'en_US');
yesterday()
날짜를 어제 날짜로, 시간을 자정으로 설정한 새 인스턴스를 반환합니다. 첫 번째와 두 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$myTime = Time::yesterday('America/Chicago', 'en_US');
tomorrow()
날짜를 내일 날짜로, 시간을 자정으로 설정한 새 인스턴스를 반환합니다. 첫 번째와 두 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$myTime = Time::tomorrow('America/Chicago', 'en_US');
createFromDate()
year, month, day를 개별 입력으로 받아 새 인스턴스를 반환합니다. 이 매개변수 중 하나라도 제공되지 않으면 현재 연도, 월, 일을 사용합니다. 네 번째와 다섯 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$today = Time::createFromDate(); // Uses current year, month, and day
$anniversary = Time::createFromDate(2018); // Uses current month and day
$date = Time::createFromDate(2018, 3, 15, 'America/Chicago', 'en_US');
createFromTime()
createFromDate()와 유사하지만 hours, minutes, seconds에만 관여합니다. Time 인스턴스의 날짜 부분에는 현재 날짜를 사용합니다. 네 번째와 다섯 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$lunch = Time::createFromTime(11, 30); // 11:30 am today
$dinner = Time::createFromTime(18, 00, 00); // 6:00 pm today
$time = Time::createFromTime($hour, $minutes, $seconds, $timezone, $locale);
create()
앞의 두 메서드의 조합으로, year, month, day, hour, minutes, seconds를 개별 매개변수로 받습니다. 제공되지 않은 값은 현재 날짜와 시간을 사용합니다. 네 번째와 다섯 번째 매개변수로 타임존과 로케일 문자열을 받습니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::create($year, $month, $day, $hour, $minutes, $seconds, $timezone, $locale);
createFromFormat()
이는 DateTimeImmutable의 동일한 이름의 메서드를 대체합니다. 타임존을 동시에 설정할 수 있으며, DateTimeImmutable 대신 Time 인스턴스를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::createFromFormat('j-M-Y', '15-Feb-2009', 'America/Chicago');
createFromTimestamp()
이 메서드는 UNIX 타임스탬프와 선택적으로 타임존과 로케일을 받아 새 Time 인스턴스를 생성합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::createFromTimestamp(1501821586, 'America/Chicago', 'en_US');
타임존을 명시적으로 전달하지 않으면 UTC로 Time 인스턴스를 반환합니다.
참고
UTC를 기본 타임존으로 사용하지 않는 한, 항상 2개의 매개변수(즉, 타임존을 명시적으로 전달)로 createFromTimestamp()를 호출하는 것을 권장합니다.
참고
v4.4.6부터 v4.6.0 이전까지 이 메서드는 타임존을 지정하지 않으면 기본 타임존으로 Time 인스턴스를 반환했습니다.
createFromInstance()
DateTime 인스턴스를 제공하는 다른 라이브러리와 작업할 때, 이 메서드를 사용하여 선택적으로 로케일을 설정하면서 Time 인스턴스로 변환할 수 있습니다. 타임존은 전달된 DateTime 인스턴스에서 자동으로 결정됩니다:
<?php
use CodeIgniter\I18n\Time;
$dt = new \DateTime('now');
$time = Time::createFromInstance($dt, 'en_US');
toDateTime()
인스턴스화 메서드는 아니지만, 이 메서드는 instance 메서드의 반대로 Time 인스턴스를 DateTime 인스턴스로 변환할 수 있습니다. 타임존 설정은 유지되지만, DateTime은 로케일을 인식하지 못하므로 로케일은 손실됩니다:
<?php
use CodeIgniter\I18n\Time;
$datetime = Time::toDateTime();
값 표시
Time 클래스는 DateTimeImmutable을 확장하므로 format() 메서드를 포함하여 제공하는 모든 출력 메서드를 사용할 수 있습니다. 그러나 DateTimeImmutable 메서드는 로케일화된 결과를 제공하지 않습니다. 그래도 Time 클래스는 값의 로케일화된 버전을 표시하는 여러 헬퍼 메서드를 제공합니다.
toLocalizedString()
이것은 DateTimeImmutable의 format() 메서드의 로케일화된 버전입니다. 익숙한 값을 사용하는 대신 IntlDateFormatter 클래스가 허용하는 값을 사용해야 합니다. 전체 값 목록은 여기에서 확인할 수 있습니다.
<?php
use CodeIgniter\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toLocalizedString('MMM d, yyyy'); // March 9, 2016
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toLocalizedString('MMM d, yyyy'); // مارس ۹, ۲۰۱۶
toDateTimeString()
이것은 IntlDateFormatter의 값을 기억하지 않아도 사용할 수 있는 세 가지 헬퍼 메서드 중 첫 번째입니다. (Y-m-d H:i:s) 형식으로 로케일화된 문자열을 반환합니다:
<?php
use CodeIgniter\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateTimeString(); // 2016-03-09 12:00:00
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateTimeString(); // ۲۰۱۶-۰۳-۰۹ ۱۲:۰۰:۰۰
toDateString()
Time의 로케일화된 날짜 부분만 표시합니다:
<?php
use CodeIgniter\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateString(); // 2016-03-09
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toDateString(); // ۲۰۱۶-۰۳-۰۹
toTimeString()
값의 로케일화된 시간 부분만 표시합니다:
<?php
use CodeIgniter\I18n\Time;
// Locale: en
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toTimeString(); // 12:00:00
// Locale: fa
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->toTimeString(); // ۱۲:۰۰:۰۰
humanize()
이 메서드는 현재 날짜/시간과 인스턴스의 차이를 쉽게 이해할 수 있는 사람이 읽기 좋은 형식의 문자열로 반환합니다. ‘3 hours ago’, ‘in 1 month’ 등과 같은 문자열을 생성할 수 있습니다:
<?php
use CodeIgniter\I18n\Time;
// Assume current time is: March 10, 2017 (America/Chicago)
$time = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
echo $time->humanize(); // 1 year ago
표시되는 정확한 시간은 다음과 같은 방식으로 결정됩니다:
시간 차이 |
결과 |
|---|---|
1 year < $time < 2 years |
in 1 year / 1 year ago |
1 month < $time < 1 year |
in 6 months / 6 months ago |
7 days < $time < 1 month |
in 3 weeks / 3 weeks ago |
today < $time < 7 days |
in 4 days / 4 days ago |
$time == yesterday / tomorrow |
Yesterday / Tomorrow |
59 minutes < $time < 1 day |
in 2 hours / 2 hours ago |
now < $time < 1 hour |
in 35 minutes / 35 minutes ago |
$time == now |
Now |
결과 문자열은 언어 파일인 system/Language/en/Time.php에서 가져옵니다. 재정의하려면 app/Language/{locale}/Time.php를 생성하세요.
개별 값 다루기
Time 객체는 기존 인스턴스의 연도, 월, 시간 등의 개별 항목을 가져오고 설정할 수 있는 여러 메서드를 제공합니다. 다음 메서드를 통해 가져온 모든 값은 완전히 로케일화되어 Time 인스턴스가 생성될 때 사용된 로케일을 따릅니다.
다음의 모든 getX()와 setX() 메서드는 클래스 속성처럼 사용할 수도 있습니다. 따라서 getYear()와 같은 메서드 호출은 $time->year를 통해서도 접근할 수 있습니다.
게터
다음과 같은 기본 게터가 있습니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('August 12, 2016 4:15:23pm');
// The output may vary based on locale.
echo $time->getYear(); // '2016'
echo $time->getMonth(); // '8'
echo $time->getDay(); // '12'
echo $time->getHour(); // '16'
echo $time->getMinute(); // '15'
echo $time->getSecond(); // '23'
echo $time->year; // '2016'
echo $time->month; // '8'
echo $time->day; // '12'
echo $time->hour; // '16'
echo $time->minute; // '15'
echo $time->second; // '23'
이 외에도 날짜에 대한 추가 정보를 제공하는 여러 메서드가 있습니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('August 12, 2016 4:15:23pm');
// The output may vary based on locale.
echo $time->getDayOfWeek(); // '6'
echo $time->getDayOfYear(); // '225'
echo $time->getWeekOfMonth(); // '2'
echo $time->getWeekOfYear(); // '33'
echo $time->getTimestamp(); // 1471018523 - UNIX timestamp (locale independent)
echo $time->getQuarter(); // '3'
echo $time->dayOfWeek; // '6'
echo $time->dayOfYear; // '225'
echo $time->weekOfMonth; // '2'
echo $time->weekOfYear; // '33'
echo $time->timestamp; // 1471018523
echo $time->quarter; // '3'
getAge()
Time 인스턴스와 현재 시간 사이의 나이를 년 단위로 반환합니다. 생일을 기반으로 누군가의 나이를 확인하는 데 완벽합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('5 years ago');
echo $time->getAge(); // 5
echo $time->age; // 5
getDST()
Time 인스턴스가 현재 일광 절약 시간제를 따르고 있는지 여부에 따라 boolean true/false를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
echo Time::createFromDate(2012, 1, 1)->getDst(); // false
echo Time::createFromDate(2012, 9, 1)->dst; // true
getLocal()
Time 인스턴스가 애플리케이션이 현재 실행 중인 것과 동일한 타임존에 있으면 boolean true를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
echo Time::now()->getLocal(); // true
echo Time::now('Europe/London')->local; // false
getUtc()
Time 인스턴스가 UTC 시간이면 boolean true를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
echo Time::now('America/Chicago')->getUtc(); // false
echo Time::now('UTC')->utc; // true
getTimezone()
Time 인스턴스의 타임존으로 설정된 새 DateTimeZone 객체를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
$tz = Time::now()->getTimezone();
$tz = Time::now()->timezone;
echo $tz->getName();
echo $tz->getOffset();
getTimezoneName()
Time 인스턴스의 전체 타임존 문자열을 반환합니다:
<?php
use CodeIgniter\I18n\Time;
echo Time::now('America/Chicago')->getTimezoneName(); // America/Chicago
echo Time::now('Europe/London')->timezoneName; // Europe/London
세터
다음과 같은 기본 세터가 있습니다. 설정된 값이 범위를 벗어나면 InvalidArgumentExeption이 발생합니다.
참고
모든 세터는 원본 인스턴스를 그대로 두고 새 Time 인스턴스를 반환합니다.
참고
모든 세터는 값이 범위를 벗어나면 InvalidArgumentException을 발생시킵니다.
<?php
$time = $time->setYear(2017);
$time = $time->setMonth(4); // April
$time = $time->setMonth('April');
$time = $time->setMonth('Feb'); // February
$time = $time->setDay(25);
$time = $time->setHour(14); // 2:00 pm
$time = $time->setMinute(30);
$time = $time->setSecond(54);
setTimezone()
현재 타임존에서 새 타임존으로 시간을 변환합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('13 May 2020 10:00', 'America/Chicago');
$time2 = $time->setTimezone('Europe/London'); // Returns new instance converted to new timezone
echo $time->getTimezoneName(); // American/Chicago
echo $time2->getTimezoneName(); // Europe/London
echo $time->toDateTimeString(); // 2020-05-13 10:00:00
echo $time2->toDateTimeString(); // 2020-05-13 18:00:00
setTimestamp()
날짜를 새 타임스탬프로 설정한 새 인스턴스를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
// The Application Timezone is "America/Chicago".
$time = Time::parse('May 10, 2017');
$time2 = $time->setTimestamp(strtotime('April 1, 2017'));
echo $time->toDateTimeString(); // 2017-05-10 00:00:00
echo $time2->toDateTimeString(); // 2017-04-01 00:00:00
참고
v4.6.0 이전에는 버그로 인해 이 메서드가 잘못된 날짜/시간을 반환할 수 있었습니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
값 수정
다음 메서드를 사용하면 현재 Time에 값을 더하거나 빼서 날짜를 수정할 수 있습니다. 기존 Time 인스턴스는 수정되지 않고 새 인스턴스를 반환합니다.
<?php
$time = $time->addSeconds(23);
$time = $time->addMinutes(15);
$time = $time->addHours(12);
$time = $time->addDays(21);
$time = $time->addMonths(14);
$time = $time->addCalendarMonths(2);
$time = $time->addYears(5);
$time = $time->subSeconds(23);
$time = $time->subMinutes(15);
$time = $time->subHours(12);
$time = $time->subDays(21);
$time = $time->subMonths(14);
$time = $time->subCalendarMonths(2);
$time = $time->subYears(5);
addCalendarMonths() / subCalendarMonths()
전체 달력 월을 더하거나 빼서 현재 Time을 수정합니다. 반복 날짜에서 달력 월이 건너뛰어지지 않아야 하는 경우 이 메서드가 유용할 수 있습니다. 초기 날짜 2025-01-31에 대한 addMonths()와 addCalendarMonths()의 비교는 아래 표를 참조하세요.
$months |
addMonths() |
addCalendarMonths() |
|---|---|---|
1 |
2025-03-03 |
2025-02-28 |
2 |
2025-03-31 |
2025-03-31 |
3 |
2025-05-01 |
2025-04-30 |
4 |
2025-05-31 |
2025-05-31 |
5 |
2025-07-01 |
2025-06-30 |
6 |
2025-07-31 |
2025-07-31 |
두 시간 비교
다음 메서드를 사용하면 하나의 Time 인스턴스를 다른 인스턴스와 비교할 수 있습니다. 모든 비교는 다른 타임존이 올바르게 처리되도록 비교 전에 먼저 UTC로 변환됩니다.
equals()
전달된 datetime이 현재 인스턴스와 같은지 결정합니다. 여기서 같다는 것은 동일한 순간을 나타낸다는 의미이며, 두 시간 모두 UTC로 변환하여 비교하므로 동일한 타임존에 있을 필요는 없습니다:
<?php
use CodeIgniter\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'Europe/London');
$time1->equals($time2); // true
비교 대상 값은 Time 인스턴스, DateTime 인스턴스, 또는 새 DateTime 인스턴스가 이해할 수 있는 형식의 전체 날짜/시간 문자열일 수 있습니다. 첫 번째 매개변수로 문자열을 전달할 때, 두 번째 매개변수로 타임존 문자열을 전달할 수 있습니다. 타임존이 제공되지 않으면 시스템 기본값이 사용됩니다:
<?php
$time1->equals('January 11, 2017 03:50:00', 'Europe/London'); // true
sameAs()
equals() 메서드와 동일하지만, 날짜, 시간, 타임존이 모두 동일할 때만 true를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'Europe/London');
$time1->sameAs($time2); // false
$time2->sameAs('January 10, 2017 21:50:00', 'America/Chicago'); // true
isBefore()
전달된 시간이 현재 인스턴스보다 이전인지 확인합니다. 비교는 두 시간의 UTC 버전을 기준으로 수행됩니다:
<?php
use CodeIgniter\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'America/Chicago');
$time1->isBefore($time2); // true
$time2->isBefore($time1); // false
비교 대상 값은 Time 인스턴스, DateTime 인스턴스, 또는 새 DateTime 인스턴스가 이해할 수 있는 형식의 전체 날짜/시간 문자열일 수 있습니다. 첫 번째 매개변수로 문자열을 전달할 때, 두 번째 매개변수로 타임존 문자열을 전달할 수 있습니다. 타임존이 제공되지 않으면 시스템 기본값이 사용됩니다:
<?php
$time1->isBefore('March 15, 2013', 'America/Chicago'); // false
isAfter()
isBefore()와 완전히 동일하게 작동하지만 전달된 시간 이후인지 확인합니다:
<?php
use CodeIgniter\I18n\Time;
$time1 = Time::parse('January 10, 2017 21:50:00', 'America/Chicago');
$time2 = Time::parse('January 11, 2017 03:50:00', 'America/Chicago');
$time1->isAfter($time2); // false
$time2->isAfter($time1); // true
isPast()
Added in version 4.7.0.
현재 인스턴스의 시간이 “now”를 기준으로 과거인지 결정합니다. boolean true/false를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('yesterday');
echo $time->isPast(); // true
isFuture()
Added in version 4.7.0.
현재 인스턴스의 시간이 “now”를 기준으로 미래인지 결정합니다. boolean true/false를 반환합니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('tomorrow');
echo $time->isFuture(); // true
차이 보기
두 Time을 직접 비교하려면 CodeIgniter\I18n\TimeDifference 인스턴스를 반환하는 difference() 메서드를 사용합니다.
첫 번째 매개변수는 Time 인스턴스, DateTime 인스턴스, 또는 날짜/시간이 포함된 문자열입니다. 첫 번째 매개변수로 문자열을 전달하면 두 번째 매개변수로 타임존 문자열을 사용할 수 있습니다:
<?php
use CodeIgniter\I18n\Time;
$time = Time::parse('March 10, 2017', 'America/Chicago');
$diff = $time->difference(Time::now());
$diff = $time->difference(new \DateTime('July 4, 1975', 'America/Chicago'));
$diff = $time->difference('July 4, 1975 13:32:05', 'America/Chicago');
TimeDifference 인스턴스를 얻으면 두 시간의 차이에 대한 정보를 찾기 위해 사용할 수 있는 여러 메서드가 있습니다. 반환되는 값은 원래 시간보다 과거이면 음수, 미래이면 양수입니다:
<?php
use CodeIgniter\I18n\Time;
$current = Time::parse('March 10, 2017', 'America/Chicago');
$test = Time::parse('March 10, 2010', 'America/Chicago');
$diff = $current->difference($test);
echo $diff->getYears(); // -7
echo $diff->getMonths(); // -84
echo $diff->getWeeks(); // -365
echo $diff->getDays(); // -2557
echo $diff->getHours(); // -61368
echo $diff->getMinutes(); // -3682080
echo $diff->getSeconds(); // -220924800
참고
v4.4.7 이전에는 Time이 비교 전에 항상 타임존을 UTC로 변환했습니다. 이로 인해 일광 절약 시간제(DST)로 인해 하루가 24시간과 다를 때 예상치 못한 결과가 발생할 수 있었습니다.
v4.4.7부터 동일한 타임존에 있는 날짜/시간을 비교할 때 UTC로 변환하지 않고 그대로 비교합니다.
<?php use CodeIgniter\I18n\Time; // 31 Mar 2024 - Daylight Saving Time Starts $current = Time::parse('2024-03-31', 'Europe/Madrid'); $test = Time::parse('2024-04-01', 'Europe/Madrid'); $diff = $current->difference($test); echo $diff->getDays(); // 0 in v4.4.6 or before // 1 in v4.4.7 or later
getX() 메서드를 사용하거나 속성처럼 계산된 값에 접근할 수 있습니다:
<?php
echo $diff->years; // -7
echo $diff->months; // -84
echo $diff->weeks; // -365
echo $diff->days; // -2557
echo $diff->hours; // -61368
echo $diff->minutes; // -3682080
echo $diff->seconds; // -220924800
humanize()
Time의 humanize() 메서드와 마찬가지로, 두 시간의 차이를 쉽게 이해할 수 있는 사람이 읽기 좋은 형식의 문자열로 반환합니다. ‘3 hours ago’, ‘in 1 month’ 등과 같은 문자열을 생성할 수 있습니다. 가장 큰 차이는 매우 최근 날짜를 처리하는 방식에 있습니다:
<?php
use CodeIgniter\I18n\Time;
$current = Time::parse('March 10, 2017', 'America/Chicago');
$test = Time::parse('March 9, 2016 12:00:00', 'America/Chicago');
$diff = $current->difference($test);
echo $diff->humanize(); // 1 year ago
표시되는 정확한 시간은 다음과 같은 방식으로 결정됩니다:
시간 차이 |
결과 |
|---|---|
1 year < $time < 2 years |
in 1 year / 1 year ago |
1 month < $time < 1 year |
in 6 months / 6 months ago |
7 days < $time < 1 month |
in 3 weeks / 3 weeks ago |
today < $time < 7 days |
in 4 days / 4 days ago |
1 hour < $time < 1 day |
in 8 hours / 8 hours ago |
1 minute < $time < 1 hour |
in 35 minutes / 35 minutes ago |
$time < 1 minute |
Now |
결과 문자열은 언어 파일인 system/Language/en/Time.php에서 가져옵니다. 재정의하려면 app/Language/{locale}/Time.php를 생성하세요.