오늘 자정에 대한 타임 스탬프를 받고 있습니까?


123

오늘 자정에 PHP에서 타임 스탬프를 얻는 방법은 무엇입니까? 월요일 오후 5 시라고 말하고 이미 발생한 월요일 (오늘) 자정 (오전 12시)의 타임 스탬프를 원합니다.

감사합니다


자정은 오전도 오후도 아닙니다. 또한 기술적으로 자정에 대한 타임 스탬프가 없습니다.
hakre

16
@hakre 나는 당신과 동의하지 않습니다. 자정은 오전이고 타임 스탬프의 형식이 무엇이든 자정 값이 있습니다.
G-Nugget

1
00:00:00이 오늘 또는 내일로 간주되는 경우. 오늘 자정이 기술적으로 거의 항상 우리 뒤에 있습니다. "오늘 밤"의 23:59:59 또는 "오늘의 자정, 내일"00:00:00을 원합니다.
wesside

5
00:00:00의 시간은 이미 발생한 00:00:00에 도달하는 데 걸리는 시간과 마찬가지로 오늘 자정입니다. 오늘 밤은 23:59:59입니다. 오늘의 관점에서 말하는 경우. 자정은 오전입니다.
Nazca 2014 년

4
00:00은 하루가 시작되는 자정이고, 24:00은 하루가 끝나는 자정입니다. 그러나 단순성을 위해 대부분의 디지털 시계는 24:00을 건너 뛰고 자정이 새로운 날의 시작이라고 선언합니다. 즉 2 월 8 일 24:00과 2 월 9 일 00:00은 실제로 동일한 시점입니다.
Johan

답변:


239
$timestamp = strtotime('today midnight');

PHP가 제공하는 기능을 살펴볼 수 있습니다 : http://php.net/datetime


52
@SamHuckaby : 훨씬 더 쉽습니다 : $timestamp = strtotime('today');자정입니다. 그러나 pssst 위의 질문에 대한 답변으로 더 멋져 보입니다;)
hakre

나는 실제로 오늘과 오늘 자정을 시작해야합니다. 오늘의 시작을 어떻게 찾을 수 있습니까? 00:00:00
Happy Coder

3
@AlwinAugustin : 당신은 당신의 표현을 다르게 생각해야합니다. 자정은 기술적으로 이틀 사이입니다. 그래서 다소 "오늘은 더 이상 없다"가 있습니다. 또한 : 오늘 자정 (정의에 따라)은 오늘의 시작 (바로 직전)입니다. 아마도 오늘 정오 이후 다음 자정을 의미 것입니다 .
hakre nov.

네, 실제로 제가 필요한 것은 오늘 00:00:00과 오늘 23:59:59입니다
Happy Coder

2
이것은 UTC + 0이 아닌 PHP 서버 시간대의 자정을 생성합니다 ! UTC + 0을 얻으려면 strtotime('today+00:00').
mae

73

strtotime ()이 가지고있는 32 비트 제한을 넘어서는 날짜에 문제가 없기 때문에 새로운 PHP DateTime 객체를 사용해야한다고 생각합니다. 다음은 오늘 자정에 날짜를 얻는 방법의 예입니다.

$today = new DateTime();
$today->setTime(0,0);

또는 PHP 5.4 이상을 사용하는 경우 다음과 같이 할 수 있습니다.

$today = (new DateTime())->setTime(0,0);

그런 다음을 사용 echo $today->format('Y-m-d');하여 개체 출력 형식을 가져올 수 있습니다 .

PHP DateTime 객체


14
또한 새 DateTime 개체를 사용하는 것을 선호합니다. 이 답변을 @ hakr 's와 결합하면 다음과 같이 표시됩니다 new DateTime('today midnight'). 이는 의도를 더 명확하게 만듭니다 (물론 맛의 문제입니다).
Martijn 2014

1
ORM SQL 작업을하고 있는데 비교를 위해 DateTime 개체를 사용해야했습니다. 이것이 바로 제가 찾던 것입니다. +1
NobleUplift

있을 수 있습니다$today = new DateTime('today')
ProgZi

DateTime에서 상속 된 Carbon을 사용하는 경우에도 유용합니다. 따라서, 당신은 또한 할 수 new Carbon('today midnight')있고 당신은 ->subDays(6). carbon.nesbot.com
Christopher K를

32 비트 제한과 관련하여 : strtotime에 대한 PHP 문서는 다음과 같이 말합니다 . "64 비트 버전의 PHP의 경우 유효한 타임 스탬프 범위는 사실상 무한합니다. 64 비트는 양방향으로 약 2,300 억 년을 나타낼 수 있기 때문입니다." 따라서 32 비트 PHP에만 적용됩니다.
Christopher K.


7

태양이 발 바로 아래를 지나가는 가장 최근의 천체 사건의 시간을 계산하고, 정오를 표시하는 지역 관습에 맞게 조정하고, 사람들이 직장에서 돌아온 후 충분한 일광이 남도록 잠재적으로 조정합니다. 기타 정치적 고려 사항.

벅찬 맞죠? 실제로 이것은 일반적인 문제이지만 완전한 대답은 위치에 따라 다릅니다.

$zone = new \DateTimeZone('America/New_York'); // Or your own definition of “here”
$todayStart = new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();

“여기”에 대한 잠재적 정의는 https://secure.php.net/manual/en/timezones.php에 나열되어 있습니다.


처럼 strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre

5
$today_at_midnight = strtotime(date("Ymd"));

당신이 원하는 것을 줄 것입니다.

설명

내가 한 일은 PHP의 날짜 함수를 사용하여 시간에 대한 참조없이 오늘 날짜를 가져온 다음 날짜와 시간을 epoch 타임 스탬프로 변환하는 'string to time'함수에 전달했습니다. 시간이 없으면 그날의 1 초를 가정합니다.

참조 : 날짜 기능 : http://php.net/manual/en/function.date.php

시간에 대한 문자열 : http://us2.php.net/manual/en/function.strtotime.php


타임 스탬프? 그것은 단지 데이트입니다.
wesside

OP가 요청한 특정 형식이 있습니까? 그렇다면 원하는 형식을 반환하도록 게시물을 수정하겠습니다.
SamHuckaby

완전히 간과 된 strtotime()마음은 날짜 기능에 너무 집중했습니다. 사과.
wesside

2

더 많은 객체 방식으로 :

$today = new \DateTimeImmutable('today');

예:

 echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 00:00:00

과:

echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');
// will output: 2019-05-16 14:00:35

1
$timestamp = strtotime('today midnight');

와 같다

$timestamp = strtotime('today');

서버에서 약간의 작업이 줄어 듭니다.


0

$midnight = strtotime('midnight');이다 유효한
또한 시도 할 수 strtotime('12am')또는 strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). 기본값이 오늘이기 때문에 자정 이전에 오늘 추가를 건너 뛰었습니다.


0

Carbon을 사용하는 경우 다음을 수행 할 수 있습니다. 이 날짜의 형식을 지정하여 ExpireHTTP 헤더 를 설정할 수도 있습니다 .

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)

0

2020 년 4 월 19 일 업데이트 된 답변

간단히 우리는 이것을 할 수 있습니다 :

$today = date('Y-m-d 00:00:00');


-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());


질문은 PHP와 관련이 있습니다. 이 답변은 JavaScript로 작성되었습니다.
Electric Coffee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.