저는 이제 아빠가 된 지 1년 6개월이 되었으며, 이는 PR을 병합하거나 이 패키지를 더욱 추진하는 데 제때에 이르렀다는 사실을 분명히 보여줍니다. 여기서 가장 큰 제약은 시간입니다. 나는 프로젝트를 추진할 동기와 시간이 더 많은 누군가에게 프로젝트를 넘겨주게 되어 기쁩니다. 나에게 메시지를 보내주세요. 건배!
_ _ _ __ ___ ___ _ __ ___ ___ _ __ | |_ _ __ | |__ _ __ | '_ ` _ / _ | '_ ` _ / _ '_ | __| | '_ | '_ | '_ | | | | | | (_) | | | | | | __/ | | | |_ _| |_) | | | | |_) | |_| |_| |_|___/|_| |_| |_|___|_| |_|__(_) .__/|_| |_| .__/ |_| |_|
변경 로그
i18n을 사용하여 날짜를 구문 분석, 조작 및 형식화하기 위한 날짜 라이브러리입니다.
moment.php는 PHP의 DateTime 클래스를 기반으로 하기 때문에 PHP 5.3 이상입니다.
작곡가를 통해 쉽게 설치할 수 있습니다. 아직도 어떤 작곡가인지 모르시나요? 여기에 정보를 입력하세요.
composer require fightbulc/moment
$m = 새로운 순간순간(); // 기본값은 "현재"입니다. UTCecho $m->format(); // 예 2012-10-03T10:00:00+0000$m = new MomentMoment('now', 'Europe/Berlin');echo $m->format(); // 예 2012-10-03T12:00:00+0200$m = new MomentMoment('2017-06-06T10:00:00', '유럽/베를린');echo $m->format(); // 예: 2012-10-03T12:00:00+0200$m = new MomentMoment(1499366585);echo $m->format(); // 예: 2017-07-06T18:43:05+0000
Moment는 다음 날짜 형식을 입력으로 구문 분석합니다.
const ATOM = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00const COOKIE = 'l, dMy H:i:s T'; // 2005년 8월 15일 월요일 15:52:01 UTCconst ISO8601 = 'Ym-dTH:i:sO'; // 2005-08-15T15:52:01+0000const RFC822 = 'D, d M y H:i:s O'; // 2005년 8월 15일 월요일 15:52:01 +0000const RFC850 = 'l, dMy H:i:s T'; // 2005년 8월 15일 월요일 15:52:01 UTCconst RFC1036 = 'D, d M y H:i:s O'; // 8월 15일 월요일 15:52:01 +0000const RFC1123 = 'D, d M Y H:i:s O'; // 2005년 8월 15일 월요일 15:52:01 +0000const RFC2822 = 'D, d M Y H:i:s O'; // 2005년 8월 15일 월요일 15:52:01 +0000const RSS = 'D, d M Y H:i:s O'; // 2005년 8월 15일 월요일 15:52:01 +0000const W3C = 'Ym-dTH:i:sP'; // 2005-08-15T15:52:01+00:00// 또한 Moment는 시간대나 초 없이 날짜를 구문 분석하려고 시도합니다.const NO_TZ_MYSQL = 'Ymd H:i:s'; // 2005-08-15 15:52:01const NO_TZ_NO_SECS = 'Ymd H:i'; // 2005-08-15 15:52const NO_TIME = 'Ymd'; // 2005-08-15// 시간 분수 ".000"은 자동으로 제거됩니다.$timeWithFraction = '2016-05-04T10:00:00.000';
지원되는 모든 언어를 보려면 Locales
폴더를 살펴보세요. 기본 로케일은 en_GB
입니다.
$m = new MomentMoment();echo $m->format('[Weekday:] l'); // 예: 평일: 수요일// 독일어 설정 localeMomentMoment::setLocale('de_DE');$m = new MomentMoment();echo $m->format('[Wochentag:] l'); // 예: Wochentag: Mittwoch
지금까지 지원되는 언어:
ar_TN
아랍어(튀니지) ca_ES
카탈로니아어 cs_CZ
체코어 da_DK
덴마크어 de_DE
독일어(독일) en_CA
영어(캐나다) en_GB
영어(영국) en_US
영어(미국) eo_EO
에스페란토 es_ES
스페인어(유럽) fa_IR
페르시아어 fi_FI
핀란드어 fr_CA
프랑스어(캐나다) fr_FR
프랑스어( 유럽) hu_HU
헝가리어 id_ID
인도네시아어 it_IT
이탈리아어 ja_JP
일본어 kz_KZ
카자흐어 lv_LV
라트비아어(라트비에슈) nl_NL
네덜란드어 oc_LNC
Lengadocian pl_PL
폴란드어 pt_BR
포르투갈어(브라질) pt_PT
포르투갈어(포르투갈) ru_RU
러시아어(기본 버전) sv_SE
스웨덴어 th_TH
태국어 tr_TR
uk_UA
우크라이나어 vi_VN
베트남어 zh_CN
중국어 zh_TW
중국어 (전통적인)
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->setTimezone('UTC')->format(); // 2012-04-25T01:00:00+0000
MomentMoment::setDefaultTimezone('CET');$m = new MomentMoment('2016-09-13T14:32:06');echo $m->format(); // 2016-09-13T14:32:06+0100
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('l, dS F Y / H:i (e)'); // 2012년 4월 25일 수요일 / 03:00 (유럽/베를린)
형식은 PHP의 Date 함수와 DateTime 클래스를 기반으로 합니다.
이제 FormatsInterface
를 구현하는 클래스를 전달하여 다양한 형식 처리를 주입할 수 있습니다. moment.js의 모든 형식을 구현하기 위한 예제는 테스트 폴더에서 찾을 수 있습니다. moment.js
형식을 PHP 형식과 일치시키는 데 시간을 내어 주신 Ashish에게 감사드립니다. 실제 예제를 보려면 테스트 스크립트를 살펴보세요.
누구나 같은 방식으로 형식 클래스를 작성할 수 있습니다. 쉽고 확장 가능합니다.
// 원하는 형식 클래스 가져오기// 순간 생성$m = new MomentMoment('2012-04-25T03:00:00', 'CET');// moment.js 정의를 사용한 형식secho $m->format('LLLL ', new MomentCustomFormatsMomentJs()); // 2012년 4월 25일 수요일 오전 3시
Custom formats
모든 Locale
의 일부로 제공될 수도 있습니다. 해당 로캘에 아직 존재하지 않는 경우 계속해서 추가하세요. 프랑스어 로캘에 대한 예를 참조하세요.
모든 텍스트를 []
안에 넣으면 모든 문자가 자동으로 이스케이프됩니다.
$m = new MomentMoment('2012-04-25T03:00:00', 'CET');echo $m->format('[우리는 다음 달에 있습니다:] F'); // 현재 월은 다음과 같습니다: 4월
PHP의 내부 서수 계산에 버그가 있는 것 같습니다. 이 문제를 처리하기 위해 빠른 수정 사항을 추가했습니다.
다음 예는 주어진 날짜의 주를 인쇄합니다. 22nd
인쇄해야 합니다.
// 내부 함수date('WS', mktime(12, 22, 0, 5, 27, 2014)); // 22일// moment.php$m = new MomentMoment('2014-05-27T12:22:00', 'CET');$m->format('WS'); // 22일
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->addHours(2)->format(); // 2012-05-15T14:30:00+0200$m = new MomentMoment('2012-05-15T12:30:00', 'CET');echo $m->subtractDays(7)->subtractMinutes(15 )->형식(); // 2012-05-08T12:15:00+0200$m = new MomentMoment('@1401443979', 'CET'); // 유닉스 timeecho $m->subtractDays(7)->subtractMinutes(15)->format(); // 2014-05-23T09:44:39+0000
때로는 주어진 순간을 취하고 원본을 변경하지 않고 작업하는 것이 유용할 수 있습니다. 이를 위해서는 cloning()
사용하세요.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET');$c = $m->cloning()->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16
또는 원본에서 불변 모드를 활성화할 수 있습니다.
$m = new MomentMoment('2012-05-15T12:30:00', 'CET', true);$c = $m->addDays(1);echo $m->getDay(); // 15echo $c->getDay(); // 16// 생성 후 불변 모드를 변경할 수도 있습니다:$m->setImmutableMode(false)->subtractDays(1);echo $m->getDay(); // 14
불변 모드에서는 수정 사항을 적용하기 전에 모든 수정 메서드가 암시적으로 cloning()
호출하도록 합니다.
추가하다 | 덜다 |
---|---|
추가초($s) | 빼기초($s) |
추가분($i) | 빼기분($i) |
추가시간($h) | 빼기시간($h) |
추가일($d) | 빼기일($d) |
추가주($w) | 빼기주($w) |
추가개월($m) | 빼기개월($m) |
추가년($y) | 빼기년($y) |
세터 | 얻는 사람 |
---|---|
setSecond($s) | getSecond() |
세트분($m) | getMinut() |
setHour($h) | getHour() |
세트데이($d) | getDay() |
세트월($m) | get월() |
세트연도($y) | getYear() |
-- | getQuarter() |
$m = new MomentMoment('2013-02-01T07:00:00');$momentFromVo = $m->fromNow();// 또는 특정 순간부터$m = new MomentMoment('2013-02-01T07: 00:00');$momentFromVo = $m->from('2011-09-25T10:00:00');// 결과는 값 객체로 제공됩니다. classecho $momentFromVo->getDirection() // "future"echo $momentFromVo->getSeconds() // -42411600echo $momentFromVo->getMinutes() // -706860echo $momentFromVo->getHours() // -11781echo $momentFromVo->getDays() // -490.88echo $momentFromVo->getWeeks() // -70.13echo $momentFromVo->getMonths() // -17.53echo $momentFromVo- >getYears() // -1.42에코 $momentFromVo->getRelative() // 1년 후
때로는 특정 날짜의 기간 경계를 얻는 것이 도움이 될 수 있습니다. 예를 들어 오늘이 수요일이고 오늘 주의 시작/종료 날짜가 필요한 경우입니다. 허용되는 기간은 week
, month
, quarter
입니다.
$m = new MomentMoment('2013-10-23T10:00:00');$momentPeriodVo = $m->getPeriod('week');// 결과는 값 객체와 함께 제공됩니다. classecho $momentPeriodVo->getStartDate( ) ->형식('Ymd'); // 2013-10-21echo $momentPeriodVo->getEndDate() ->형식('Ymd'); // 2013-10-27echo $momentPeriodVo->getRefDate() ->형식('Ymd'); // 2013-10-23echo $momentPeriodVo->getInterval(); // 43 = 해당 연도의 주
월별 및 분기별 기간에 대해 동일한 절차:
$momentPeriodVo = $m->getPeriod('월');$momentPeriodVo = $m->getPeriod('분기');
달력 시간은 now
를 기준으로 시간을 표시하지만 Moment::fromNow()
와는 약간 다릅니다. Moment::calendar()
날짜가 오늘에 얼마나 가까운지에 따라 다른 문자열로 날짜 형식을 지정합니다.
(new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(6)->calendar(); // 지난 주(new MomentMoment('2014-03-30T16:58:00', 'CET'))->subtractDays(1)->calendar(); // 어제(new MomentMoment('2014-03-30T16:58:00', 'CET'))->calendar(); // today(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(1)->calendar(); // 내일(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(3)->calendar(); // 다음 주(new MomentMoment('2014-03-30T16:58:00', 'CET'))->addDays(10)->calendar(); // 그 밖의 모든 것
시간 | 표시하다 |
---|---|
지난주 | 지난 월요일 15시 54분 |
전날 | 어제 15:54 |
같은 날 | 오늘 15:54 |
이튿날 | 내일 15시 54분 |
다음 주 | 수요일 15:54 |
그 밖의 모든 것 | 2014년 4월 9일 |
참고: at 00:00
시간을 생략하려면 $moment->calendar(false)
사용하세요.
moment.js와 동일한 프로세스: 시간 단위의 시작/끝으로 설정하여 원래 순간을 변경합니다.
$m = new MomentMoment('20140515T10:15:23', 'CET');$m->startOf('연도'); // 올해 1월 1일 00:00으로 설정$m->startOf('quarter'); // 현재 분기의 시작, 월의 1일, 00:00$m->startOf('month'); // 이번 달 1일로 설정, 00:00$m->startOf('week'); // 이번 주의 첫날로 설정, 00:00$m->startOf('day'); // 오늘 00:00으로 설정$m->startOf('hour'); // 지금으로 설정, 0분, 0초$m->startOf('분'); // 지금으로 설정하지만 0초입니다.$m->endOf('year'); // 올해 12월 31일 23시 59분으로 설정$m->endOf('quarter'); // 현재 분기의 끝, 월의 마지막 날, 23:59$m->endOf('month')로 설정; // 이번 달의 마지막 날인 23:59$m->endOf('week')로 설정; // 이번 주의 마지막 날인 23:59$m->endOf('day')로 설정; // 오늘 23시 59분으로 설정$m->endOf('hour'); // 지금으로 설정했지만 59분, 59초$m->endOf('분'); // 지금으로 설정되지만 59초가 걸립니다.
참고: 밀리초를 다루지 않기 때문에 second
기간은 무시했습니다.
내 고객 중 한 명은 선택한 평일까지 시간을 확보해야 했습니다. 과제는 다음 3주 동안의 Tuesdays
과 Thursdays
날짜를 알려주는 것이었습니다. 그래서 정확히 이 작업을 수행하는 작은 핸들러를 추가했습니다. 결과적으로 Moment Objects
로 채워진 배열을 받게 됩니다.
// 1 - 7 = 월 - 일$weekdayNumbers = [2, // 화요일4, // 목요일];$m = new MomentMoment();$dates = $m->getMomentsByWeekdays($weekdayNumbers, 3);// $ 날짜 = [순간, 순간, 순간 ...]
이제 결과를 실행하고 드롭다운 필드 또는 필요한 모든 항목에 서식을 지정할 수 있습니다.
moment.js에서 유용한 메소드를 이식해 보세요.
단위 테스트 추가
추가됨:
PHP 8.2 #218 지원
PHP 8.3 #227 지원
결정된:
프랑스어 로케일
캐나다 테스트
추가됨:
에스페란토어 로케일
카자흐어 로케일
결정된:
DateTime::createFromFormat 서명 일치
추가됨:
페르시아어 로케일
추가됨:
GH 작업 워크플로에 대한 코드 검사
영어/프랑스어용 캐나다 로케일
결정된:
몇 개의 PR과 병합하세요(감사합니다!)
추가됨:
로케일 완료
결정된:
스웨덴어 로케일
업데이트된 이탈리아어 로케일
추가됨:
en_US에 대한 사용자 정의 형식
유사한 로케일을 로드하기 위한 플래그
고정된 유형 힌트 문제
결정된:
상대 시간 형식이 누락되었습니다.
9자리 Unixtime 허용
RFC2822를 유효한 형식으로 수정했습니다.
고정 상대 시간
노르웨이어 로캘이 추가되었습니다.
수정 사항 및 로케일 추가(2018년 11월 22일 커밋 참조)
결정된:
옥시탄 지역
결정된:
러시아어 로케일 문제
추가됨:
포르투갈어(pt_PT)
결정된:
헝가리어 로케일 평일 순서
추가됨:
@로 시작하지 않고 유닉스 타임스탬프를 사용하여 순간을 초기화할 수 있습니다.
결정된:
사용자 정의 형식의 'LLL' 형식 수정
결정된:
php5.4+ 전용 구문을 제거했습니다.
결정된:
덴마크어 일 및 월 이름 올바른 대소문자
프랑스어 로케일
PHPDoc
추가됨:
날짜를 구문 분석할 때 NO_TZ_MYSQL
, NO_TZ_NO_SECS
및 NO_TIME
에 대한 const
추가됨:
네덜란드 사용자 정의 형식
결정된:
러시아어 로케일
추가됨:
터키어 로케일
결정된:
렌가도시아어 로케일
결정된:
PHP7.1 setTime에는 $microseconds
필요합니다.
추가됨:
우크라이나어 로케일
추가됨:
헝가리어 로케일
결정된:
렌가도시아어 로케일
추가됨:
베트남어 로케일
렌가도시아어 로케일
추가됨:
기본 시간대 변경
결정된:
형식인터페이스 문서
추가됨:
아랍어 로케일
로케일 수준의 사용자 정의 형식
결정된:
러시아어 로케일
추가됨:
러시아어 로케일 테스트
결정된:
폴란드어 로케일
초 계산
결정된:
러시아어: 상대 시간 수정 추가
결정된:
러시아어 로케일 상대 시간: 요일 처리
결정된:
불변 처리 누락
결정된:
향상된 폴란드어 로케일(Nominativ 추가)
결정된:
중국어 로케일
README에 허용되는 형식을 추가했습니다.
결정된:
태국어 로케일
추가됨:
카탈로니아어 로케일
결정된:
폴란드어 로케일 테스트
추가됨:
러시아어 로케일
결정된:
폴란드어 로케일 테스트
추가됨:
불변 모드
결정된:
폴란드어 로케일
추가됨:
폴란드어 로케일
추가됨:
인도네시아어 로케일
추가됨:
일본어 로케일
결정된:
네덜란드어 로케일의 오타
추가됨:
네덜란드어 로케일
추가됨:
스웨덴어 로케일
추가됨:
덴마크어 로케일
결정된:
루마니아어 로케일의 고정된 시작/종료 주중
결정된:
이탈리아어 로케일에 구분 기호 문자 추가
결정된:
주, 월, 분기의 startOf/endOf에 대한 새 인스턴스를 다시 전달
추가됨:
로케일 체코어
추가됨:
calendar
로케일은 다음 매개변수 function(Moment $m) {}
클로저로 수신합니다.
relativeTime
로케일은 다음 매개변수 function($count, $direction, Moment $m) {}
클로저로 수신합니다.
추가됨:
로케일(calendar,relativeTime)에 클로저 전달을 수정했습니다.
올바른 독일어 로케일 정보 설정
추가됨:
고정 태국어 로케일 문자열
추가됨:
로케일 중국어(번체)
추가됨:
로케일 중국어
서수 포맷터는 이제 token
받습니다. 예를 들어 dS
내의 토큰은 d
입니다.
수정됨: 11 - 13 사이의 숫자에 대한 영어 서수 문제
추가됨: 로케일 이탈리아어
수정됨: 영어 서수 문제
추가됨: 로케일 포르투갈어
결정된:
로케일에 잘못된 월 이름이 표시됨(#34)
로케일 파일 내 평일 순서 변경
추가됨:
getWeekdayNameLong()
getWeekdayNameShort()
getMonthNameLong()
getMonthNameShort()
추가됨:
로케일: 태국어
추가됨:
get월()
getYears()
getRelative()
장소
MomentFromVo:
결정된:
getSeconds()는 이제 방향도 표시합니다.
MomentFromVo:
결정된:
Unixtime 날짜에만 발생하는 시간대 문제
다른:
방향은 지금 반환됩니다: "미래"(-) / "과거"(+)
시간 값은 이제 부동 소수점으로 유형 변환됩니다.
MomentFromVo:
결정된:
순간을 구성할 때 인식할 수 없는 시간대
추가됨:
getMomentsByWeekdays()
getWeekday()
getWeekOfYear()
다른:
이스케이프된 텍스트
추가됨:
예: [Hello World]
자동으로 Hello World
로 변환됩니다.
예를 들어, 올해의 21번째 주에 대한 WS
이제 정확한 21th
주를 표시합니다.
특정 연도의 특정 분기에 대한 기간을 가져옵니다.
week
= 올해의 주
month
= 올해의 달
quarter
= 올해의 분기
주어진 인스턴스를 기반으로 새로운 변경 가능한 순간을 생성합니다.
moment.js에 의해 구현된 startOf 및 endOf
특정 날짜의 분기 기간을 가져옵니다.
세트데이()
getDay()
세트월()
get월()
setYear()
getYear()
getQuarter()
setSecond()
getSecond()
세트분()
getMinut()
setHour()
getHour()
복제() 추가됨
주어진 기간의 간격을 나타내기 위해 MomentPeriodVo
에 getInterval()
추가했습니다.
정적 클래스 MomentHelper
추가했습니다.
PHP의 내부 서수 계산을 수정했습니다(moment.js 형식과 함께 사용).
이제 텍스트를 []
로 묶어서 이스케이프할 수 있습니다.
제거됨:
추가하다()
덜다()
추가됨:
moment.js로 구현된 달력 형식
결정된:
PHP 5.3과의 비호환성
추가됨:
YYYY-mm-dd
및 YYYY-mm-ddTHH:ii:ss
형식의 날짜 테스트
유효하지 않은 날짜에 MomentException이 발생합니다.
MomentException
으로 예외 발생
인스턴스화에 대한 날짜 유효성 검사:
초 추가()
분 추가()
시간 추가()
추가일()
주 추가()
추가개월()
연도 추가()
빼기초()
빼기분()
빼기시간()
빼기일()
주 빼기()
빼기월()
빼기년()
더 이상 사용되지 않음:
추가하다()
덜다()
이 프로젝트의 관리자는 기여 가이드를 따를 것을 제안합니다.
Moment.php는 MIT 라이센스 조건에 따라 무료로 배포할 수 있습니다.
저작권 (c) 2017 티노 에리히
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 작성자나 저작권 보유자는 계약, 불법 행위 또는 기타 행위로 인해 소프트웨어나 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다. 소프트웨어.