ProgramingTip

유닉스 타임 스탬프가 주어지면 그날의 시작과 끝을 얻는 방법은 무엇입니까?

bestdevel 2020. 11. 3. 08:21
반응형

유닉스 타임 스탬프가 주어지면 그날의 시작과 끝을 얻는 방법은 무엇입니까?


다음과 같은 Unix 타임 스탬프가 있습니다.

$timestamp=1330581600

해당 타임 스탬프에 대한 하루의 시작과 끝을 어떻게 가져 옵니까?

e.g.
$beginOfDay = Start of Timestamp's Day
$endOfDay = End of Timestamp's Day

나는 시도 시도했다 :

$endOfDay = $timestamp + (60 * 60 * 23);

하지만 타임 스탬프 자체가 하루의 정확한 시작이 아니기 때문에 작동하지 않을 것이라고 생각합니다.


strtotime은 시간 / 분 / 초를 빠르게 자르는 데 사용할 수 있습니다.

$beginOfDay = strtotime("midnight", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;

DateTime도 사용할 수 있습니다 긴 타임 스탬프에서 가져 오기를 몇 가지 추가 단계가 필요합니다.

$dtNow = new DateTime();
// Set a non-default timezone if needed
$dtNow->setTimezone(new DateTimeZone('Pacific/Chatham'));
$dtNow->setTimestamp($timestamp);

$beginOfDay = clone $dtNow;

// Go to midnight.  ->modify('midnight') does not do this for some reason
$beginOfDay->modify('today');

$endOfDay = clone $beginOfDay;
$endOfDay->modify('tomorrow');
// adjust from the next day to the end of the day, per original question
$endOfDay->modify('1 second ago');

var_dump(
    array(
        'time ' => $dtNow->format('Y-m-d H:i:s e'),
        'start' => $beginOfDay->format('Y-m-d H:i:s e'),
        'end  ' => $endOfDay->format('Y-m-d H:i:s e'),
    )
);

DateTime 만

$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 00:00:00'))->getTimestamp();
$endOfDay = DateTime::createFromFormat('Y-m-d H:i:s', (new DateTime())->setTimestamp($timestamp)->format('Y-m-d 23:59:59'))->getTimestamp();

DateTime 개체가 생성되고 타임 스탬프가 원하는 타임 스탬프로 설정됩니다. 그런 다음 개체는 시간 / 분 / 초를 하루의 시작 또는 끝으로 설정하는 언어로 형식이 지정됩니다. 마지막 으로이 쿠키에서 새 DateTime 개체가 만들어지고 타임 스탬프가 검색됩니다.

읽기 가능

$dateTimeObject = new DateTime();
$dateTimeObject->setTimestamp($timestamp);
$beginOfDayString = $dateTimeObject->format('Y-m-d 00:00:00');
$beginOfDayObject = DateTime::createFromFormat('Y-m-d H:i:s', $beginOfDayString);
$beginOfDay = $beginOfDayObject->getTimestamp();

이 더 긴 버전을 사용하여 다른 방법으로 하루를 끝낼 수 있습니다.

$endOfDayObject = clone $beginOfDayOject(); // Cloning because add() and sub() modify the object
$endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S'));
$endOfDay = $endOfDayOject->getTimestamp();

당신

존재하는 다음과 같은 형식에 타임 스탬프 표시기를 추가 O하고 DateTime을 생성 한 후 타임 스탬프를 지정하여 수도 있습니다 .

$beginOfDay = DateTime::createFromFormat('Y-m-d H:i:s O', (new DateTime())->setTimezone(new DateTimeZone('America/Los_Angeles'))->setTimestamp($timestamp)->format('Y-m-d 00:00:00 O'))->getTimestamp();

DateTime의 유연성

지정된 두 번째 형식을 변경하여 월의 시작 / 종료 또는 시간의 시작 / 종료와 같은 기타 정보를 얻을 수도 있습니다. 월 : 'Y-m-01 00:00:00'

'Y-m-t 23:59:59'. 시간 : 'Y-m-d H:00:00''Y-m-d H:59:59'

add () / sub () 및 DateInterval 객체와 다양한 형식을 사용하면 시작의 모든 기간 또는 끝을 처리 할 수있는 윤년을 처리 할 약간의주의가 필요합니다.

관련 링크

PHP 문서에서 :


date()mktime()다음을 조합하여 사용할 수 있습니다 .

list($y,$m,$d) = explode('-', date('Y-m-d', $ts));
$start = mktime(0,0,0,$m,$d,$y);
$end = mktime(0,0,0,$m,$d+1,$y);

mktime() 지정된 달 이외의 날이 주어지면 월 / 년을 포장 할 수있을만큼 똑똑합니다 (1 월 32 일은 2 월 1 일 등).


시간을 현재 데이터로 변환 한 다음 strtotime 함수를 사용하여 하루의 시작을 찾고 24 시간을 더하여 하루의 끝을 찾을 수 있습니다.

나머지 연산자 (%)를 사용하여 가장 가까운 날짜를 찾을 수도 있습니다. 예를 들면 :

$start_of_day = time() - 86400 + (time() % 86400);
$end_of_day = $start_of_day + 86400;

오늘 시작 날짜 타임 스탬프입니다. 단순한

$stamp = mktime(0, 0, 0);
echo date('m-d-Y H:i:s',$stamp);

앞으로이 질문이있는 모든 사람을 위해 :

모든 요일 코드

<?php
$date = "2015-04-12 09:20:00";

$midnight = strtotime("midnight", strtotime($date));
$now = strtotime($date);

$diff = $now - $midnight;
echo $diff;
?>

당일 코드

<?php
$midnight = strtotime("midnight");
$now = date('U');

$diff = $now - $midnight;
echo $diff;
?>

$start_of_day = floor (time() / 86400) * 86400;
$end_of_day = ceil (time() / 86400) * 86400;

동일한 스크립트에 두 값이 모두 필요한 경우. 바닥과 천장을 모두 발사하는 것보다 변수 중 하나에 +/- 86400 초가 더 빠릅니다. 예를 들면 :

$start_of_day = floor (time() / 86400) * 86400;
$end_of_day = $start_of_day + 86400;

참고 URL : https://stackoverflow.com/questions/10197900/given-a-unix-timestamp-how-to-get-beginning-and-end-of-that-day

반응형