phpstrtotime 함수의 사용 상세 이해
7679 단어 phpstrtotime 함수
echo date("Y-m-d H:i:s", strtotime("feb", strtotime("2011-03-31")));
프로그램은 2011-03-03 00:00:00에 출력됩니다.표상으로 볼 때 이 결과가 반드시 우리가 원하는 것은 아닐 수도 있지만, 이것도 일종의 해결 방안이라고 할 수 있다. 이런 방안은 무엇에 의해 결정되는가?strtotime 함수는 월의 계산을 실행할 때 월만 계산합니다. 월을 지정한 월의 값으로 직접 설정하는 것과 같습니다. 예를 들어 jan,january는 내부 수치에 대응합니다.2. first 키워드first는 보조적인 키워드로 일요일, 일 등 확인 값을 지정할 수 있는 키워드와 조합하여 사용할 수 있다. 예를 들어 2011년의 첫 번째 일요일을 구한다.
echo date("Y-m-d H:i:s", strtotime("second sunday", strtotime("2011-01-01"))), "<br />";
PHP의 원본 코드에서first와 일요일의 조합 사용은 분리된다. 즉first day는 처리 작업에 대응하고 최종 C 구현에서 일의 값은 1, 즉time 구조의 d 필드는 1로 지정한다.다음 코드:
switch (time->relative.first_last_day_of) {
case 1: /* first */
time->d = 1;
break;
case 2: /* last */
time->d = 0;
time->m++;
break;
}
3,previous와next 키워드는first와 유사하고,previous 키워드는 일요일, 일요일과 조합하여 사용할 수 있으며, 지정된 시간의 직전 일요일 또는 전날을 나타낸다.다음과 같은 코드:
echo date("Y-m-d H:i:s", strtotime("previous sunday", strtotime("2011-02-01"))), "<br />";
프로그램은 2011-01-30 00:00:00 프로그램에서 2011-02-01의 일요일을 구합니다.next 키워드는previous와 반대로 다음 주 몇 주 또는 다음 날을 표시합니다.4. last 키워드 last 키워드는 이전이 될 수도 있고 마지막이 될 수도 있습니다.지난 일요일의 날짜를 구하면:
echo date("Y-m-d H:i:s", strtotime("last sunday", strtotime("2011-02-05"))), "<br />";
프로그램이 출력합니다. 2011-01-30 00:00:00 프로그램이 마지막일 때 그 응용 장면은 지정된 날짜가 있는 달의 마지막 날로date("t")에 해당하는 결과입니다.2000년 2월의 마지막 날을 구하면:
echo date("Y-m-d H:i:s", strtotime("last day", strtotime("2000-02-01"))), "<br />";
first,previous,last,this 키워드는re 파일에서 같은 그룹에 속한다.5. back과front 키워드 두 키워드는 하루 중 시간을 앞뒤로 하는 것입니다. 호출 형식은 다음과 같습니다.
echo date("Y-m-d H:i:s", strtotime("back of 24", strtotime("2011-02-01"))), "<br />";
echo date("Y-m-d H:i:s", strtotime("front of 24", strtotime("2011-02-01"))), "<br />";
• back은 시간을 지정한 시간 값의 다음 시간 15분의 위치로 설정합니다.24시라면 다음날 0시 15분까지 계산한다.front는 지정된 시간 값의 이전 시간 45분 위치를 설정합니다.0시라면 전날의 23시 45분을 계산한다.위의 코드 출력: 2011-02-02 00:15:00 2011-02-01 23:45:00.그 중에서 back of 와front of 후접의 수조는 0보다 크고 24보다 작아야 한다.strtotime 함수의 실현 기본 원리 공식 문서에서 strtotime 함수에 대한 설명은 다음과 같다. 본 함수는 미국 영어 날짜 형식을 포함하는 문자열을 받아들여 유닉스 타임 스탬프(1월 1일 197000:00:00 GMT에서 시작된 초)로 해석하려고 한다. 그 값은 now 파라미터가 제시한 시간에 비해 이 파라미터를 제공하지 않으면 시스템의 현재 시간을 사용한다.이것은 표준 PHP 내장 함수로서 PHP4부터 존재했다.strtotime 함수는 ext/date 디렉터리에서 확장된 방식으로 불러옵니다.표준의 내장 함수로서 그 정의 형식도 표준이다. 다음과 같다.
PHP_FUNCTION(strtotime)
// ,
// ,
//
}
입력 처리에서 두 개의 매개 변수가 모두 존재하는 상황을 식별하고 처리한다. 이 상태가 아니라면 두 번째 매개 변수가 존재하지 않는 상황을 처리하고 없으면 오류를 보고하고 FALSE로 돌아간다.strtotime 함수의 첫 번째 매개 변수는 문자열입니다. 이 문자열에 대해 복잡성 때문에 PHP는 그 어법 해석과 같은 도구를 사용합니다:re2c./ext/date/lib 디렉터리에서parse_date.re 파일은 원시적인 re 파일을 볼 수 있습니다.사용자가 매개 변수 형식으로 문자열을 전송하면 이 문자열은 이 프로그램에 전달되어 문자열에 따라 다른 처리 함수와 일치합니다.예를 들어strtotime('yesterday')를 호출할 때 문자열을 분석할 때 yesterday 문자열과 일치합니다. 이 문자열의 대응 함수는 다음과 같습니다.
'yesterday'
{
DEBUG_OUTPUT("yesterday");
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
TIMELIB_UNHAVE_TIME();
s->time->relative.d = -1;
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
여기에는 몇 가지 관건적인 구조체가 있습니다.PHP는 이렇게 실현해도 크게 비난할 수 없다.단지 우리의 수요가 우리가 이런 방법을 사용할 수 없다는 것을 결정했기 때문에 우리는 그것을 가치 추구 실패라고 부른다.두 번째 파라미터가 없기 때문에 프로그램은 기본 현재 시간을 사용합니다.첫 번째 매개 변수는 -1 month 문자열입니다. 이 문자열에 대응하는 re 파일의 정규는 다음과 같습니다.
typedef struct Scanner {
int fd;
uchar *lim, *str, *ptr, *cur, *tok, *pos;
unsigned int line, len;
struct timelib_error_container *errors;
struct timelib_time *time;
const timelib_tzdb *tzdb;
} Scanner;
typedef struct timelib_time {
timelib_sll y, m, d; /* Year, Month, Day */
timelib_sll h, i, s; /* Hour, mInute, Second */
double f; /* Fraction */
int z; /* GMT offset in minutes */
char *tz_abbr; /* Timezone abbreviation (display only) */
timelib_tzinfo *tz_info; /* Timezone structure */
signed int dst; /* Flag if we were parsing a DST zone */
timelib_rel_time relative;
timelib_sll sse; /* Seconds since epoch */
unsigned int have_time, have_date, have_zone, have_relative, have_weeknr_day;
unsigned int sse_uptodate; /* !0 if the sse member is up to date with the date/time members */
unsigned int tim_uptodate; /* !0 if the date/time members are up to date with the sse member */
unsigned int is_localtime; /* 1 if the current struct represents localtime, 0 if it is in GMT */
unsigned int zone_type; /* 1 time offset,
* 3 TimeZone identifier,
* 2 TimeZone abbreviation */
} timelib_time;
typedef struct timelib_rel_time {
timelib_sll y, m, d; /* Years, Months and Days */
timelib_sll h, i, s; /* Hours, mInutes and Seconds */
int weekday; /* Stores the day in 'next monday' */
int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */
int first_last_day_of;
int invert; /* Whether the difference should be inverted */
timelib_sll days; /* Contains the number of *days*, instead of Y-M-D differences */
timelib_special special;
unsigned int have_weekday_relative, have_special_relative;
} timelib_rel_time;
최종relative는 일련의 작업에 대응하고 프로그램은 앞의 -1과 뒤의 month 문자열을 식별합니다. month는 하나의 작업 유형에 대응합니다. TIMELIB_MONTH . 그 다음에 식별된 숫자와 조작 유형에 따라 다음과 같은 코드를 실행한다.
reltextunit = (('sec'|'second'|'min'|'minute'|'hour'|'day'|'fortnight'|'forthnight'|'month'|'year') 's'?) | 'weeks' | daytext;
relnumber = ([+-]*[ /t]*[0-9]+);
relative = relnumber space? (reltextunit | 'week' );
상기 코드와 같이 달의 상대값을 직접 기록하여 1을 줄인다.그러나 3월 31일과 같은 경우 2월에 31일이 없으면 프로그램은 자동으로 날짜를 다음 달로 계산한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.