답변:
이 방법은 작동 모두 윈도우와 유닉스 하고 있다 시간대 당신이 작업하는 경우 당신이 원하는 아마 인 인식 날짜 .
시간대를 신경 쓰지 않거나 서버가 사용하는 시간대를 사용하려는 경우 :
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (서버 시간대에 따라 다릅니다 ...)
시간대를 지정하려면 여기에서 EST. (뉴욕과 동일)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
또는 UTC 를 사용하려는 경우 . ( " GMT " 와 동일 )
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
그럼에도 불구하고 문자열을 구조화 된 데이터로 구문 분석 할 때 항상 엄격하게 시작하는 것이 좋습니다. 나중에 어색한 디버깅을 저장할 수 있습니다. 따라서 항상 날짜 형식을 지정하는 것이 좋습니다.
정확히 하나의 형식을 기대하는 strptime () 도 있습니다 .
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
date_parse_from_format
대신 사용 을 고려하십시오 strptime
.
strptime
Windows 플랫폼에서 구현되지 않았기 때문에 .
와 DateTime
API :
$dateTime = new DateTime('2008-09-22');
echo $dateTime->format('U');
// or
$date = new DateTime('2008-09-22');
echo $date->getTimestamp();
절차 적 API와 동일
$date = date_create('2008-09-22');
echo date_format($date, 'U');
// or
$date = date_create('2008-09-22');
echo date_timestamp_get($date);
당신이 사용하고 있기 때문에 위의 오류가 발생하면 지원되지 않는 형식을 , 당신은 사용할 수 있습니다
$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U');
// or
$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');
을 설정하지 않으면 !
시간 부분이 현재 시간으로 설정되며 시간을 생략 할 때 자정을 사용하는 처음 4 시간과 다릅니다.
또 다른 대안은 IntlDateFormatter
API 를 사용하는 것입니다 .
$formatter = new IntlDateFormatter(
'en_US',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'GMT',
IntlDateFormatter::GREGORIAN,
'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');
현지화 된 날짜 문자열로 작업하지 않는 한 더 쉬운 선택은 DateTime입니다.
!
DateTime은 요청하거나 알리지 않고 현재 시간을 추가하는 데 도움이되었으므로 내 날짜 기반 타임 스탬프가 새로 고칠 때마다 변경되어 나를 미치게하는 것을 잊지 마십시오 . Grrr.
strtotime()
당신이 의미하는 바를 "추측"하려고하는 것과 같은 기능에주의 하십시오 .
사실 22-09-2008
로 구문 분석됩니다 2008년 9월 22일 이 유일한 합리적인 것 같이.
어떻게 08-09-2008
파싱됩니까? 아마 2008 년 8 월 9 일 .
무엇에 대해 2008-09-50
? 일부 PHP 버전에서는 2008 년 10 월 20 일로 구문 분석합니다 .
따라서 입력 DD-MM-YYYY
형식 이 확실하다면 @Armin Ronacher가 제공하는 솔루션을 사용하는 것이 좋습니다 .
dd-mm-yyyy
, 없습니다 mm-dd-yyyy
.
YYYY-mm-dd
변환은 사용자에게만 표시로 발생
이 방법은 작동 모두 윈도우와 유닉스 하고 있다 시간대 당신이 작업하는 경우 당신이 원하는 아마 인 인식 날짜 .
시간대를 신경 쓰지 않거나 서버가 사용하는 시간대를 사용하려는 경우 :
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00');
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093324 (서버 시간대에 따라 다릅니다 ...)
시간대를 지정하려면 여기에서 EST. (뉴욕과 동일)
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('EST')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093305
또는 UTC 를 사용하려는 경우 . ( " GMT " 와 동일 )
$d = DateTime::createFromFormat(
'd-m-Y H:i:s',
'22-09-2008 00:00:00',
new DateTimeZone('UTC')
);
if ($d === false) {
die("Incorrect date string");
} else {
echo $d->getTimestamp();
}
1222093289
그럼에도 불구하고 문자열을 구조화 된 데이터로 구문 분석 할 때 항상 엄격하게 시작하는 것이 좋습니다. 나중에 어색한 디버깅을 저장할 수 있습니다. 따라서 항상 날짜 형식을 지정하는 것이 좋습니다.
mktime 사용 :
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
strtotime()
어떤 이유로 strtotime()
특정 날짜에 작동하지 않으므로 매우 신뢰할 수 없습니다.
strtotime () 함수를 사용하면 날짜를 타임 스탬프로 쉽게 변환 할 수 있습니다
<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');
//define date and time
$date = date("d M Y H:i:s");
// output
echo strtotime($date);
?>
추가 정보 : http://php.net/manual/en/function.strtotime.php
온라인 변환 도구 : http://freeonlinetools24.com/
다음은 split
and mtime
함수를 사용하는 매우 간단하고 효과적인 솔루션입니다 .
$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date);
//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);
그것은 나를 위해 매력처럼 작동했습니다.
이 기능 strptime()
은 Windows 에서 작동 하지 않으며 strtotime()
예기치 않은 결과를 반환 할 수 있으므로 date_parse_from_format()
다음을 사용하는 것이 좋습니다 .
$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);
날짜가 예상 한 것으로 구문 분석되는지 확인하려면 다음을 사용할 수 있습니다 DateTime::createFromFormat()
.
$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22
이 경우에는 분명하지만 예를 들어 03-04-2008
4 월 3 일 또는 3 월 4 일이 될 수 있습니다.
형식에 대해 추측하기 strptime
때문에 형식 사용을 알고 있다면 strtotime
항상 올바른 것은 아닙니다. strptime
Windows에서 구현되지 않았 으므로 사용자 정의 기능이 있습니다
반환 tm_year
값은 1900부터입니다. 그리고 tm_month
0-11입니다
예:
$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>
$time = '22-09-2008';
echo strtotime($time);
function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
$return = false;
$_timezone = date_default_timezone_get();
date_default_timezone_set( $timezone );
if( preg_match( $expression, $date, $matches ) )
$return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
date_default_timezone_set( $_timezone );
return $return;
}
// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';
//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30
내가하는 방법은 다음과 같습니다.
function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
//returns an array containing day start and day end timestamps
$old_timezone=date_timezone_get();
date_default_timezone_set($timezone);
$date=strptime($date,$format);
$day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
$day_end=$day_start+(60*60*24);
date_default_timezone_set($old_timezone);
return array('day_start'=>$day_start, 'day_end'=>$day_end);
}
$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];
이렇게하면 함수에 사용중인 날짜 형식을 알려주고 시간대를 지정할 수도 있습니다.
를 timestamp
사용하여 변환 된 mysql의 날짜를 비교할 때 문제가 발생했기 때문에 데이터베이스에 날짜를 저장하도록 설정하면 시간대 / 시간대에주의하십시오 strtotime
. 날짜를 타임 스탬프로 변환하기 전에 정확히 동일한 시간대를 사용해야합니다. 그렇지 않으면 strtotime ()은 기본 서버 시간대를 사용합니다.
이 예를 참조하십시오 : https://3v4l.org/BRlmV
function getthistime($type, $modify = null) {
$now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
if($modify) {
$now->modify($modify);
}
if(!isset($type) || $type == 'datetime') {
return $now->format('Y-m-d H:i:s');
}
if($type == 'time') {
return $now->format('H:i:s');
}
if($type == 'timestamp') {
return $now->getTimestamp();
}
}
function timestampfromdate($date) {
return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}
echo getthistime('timestamp')."--".
timestampfromdate(getthistime('datetime'))."--".
strtotime(getthistime('datetime'));
//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)
UTC 날짜 / 시간 ( 2016-02-14T12:24:48.321Z
)을 타임 스탬프 로 변환 하려면 다음과 같이하십시오.
function UTCToTimestamp($utc_datetime_str)
{
preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
$datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];
return strtotime($datetime_str);
}
$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);