Nhận dấu thời gian cho ngày hôm nay lúc nửa đêm?


123

Làm thế nào tôi sẽ nhận được một dấu thời gian trong php cho ngày hôm nay vào lúc nửa đêm. Giả sử hôm nay là 5 giờ chiều thứ hai và tôi muốn Dấu thời gian cho Thứ Hai (hôm nay) lúc nửa đêm (12 giờ sáng) đã xảy ra.

Cảm ơn bạn


Nửa đêm không sáng cũng không chiều. Ngoài ra, về mặt kỹ thuật, không tồn tại dấu thời gian cho nửa đêm.
hakre

16
@hakre Tôi không đồng ý với bạn. Nửa đêm là sáng và bất kỳ định dạng nào của dấu thời gian, đều có giá trị cho nửa đêm.
G-Nugget

1
nếu 00:00:00 được coi là hôm nay hoặc ngày mai. Nửa đêm hôm nay, ở phía sau chúng tôi, hầu hết - mọi lúc, về mặt kỹ thuật. Bạn muốn 23:59:59 của "đêm nay" hoặc 00:00:00 "nửa đêm của hôm nay, tức là ngày mai", nhiều hơn hoặc ít hơn.
wesside

5
thời điểm 00:00:00 sẽ là nửa đêm của ngày hôm nay vì mất nhiều thời gian để đến 00:00:00 đã xảy ra. 23:59:59 tối nay sẽ ở đâu. Nếu bạn nói trong điều kiện của ngày hôm nay. Nửa đêm là sáng.
Nazca,

4
00:00 là nửa đêm vào đầu một ngày, 24:00 là nửa đêm vào cuối một ngày. Tuy nhiên, để đơn giản, hầu hết các đồng hồ kỹ thuật số đều bỏ qua 24:00 - tuyên bố rằng nửa đêm là thời điểm bắt đầu một ngày mới. Tức là ngày 8 tháng 2 24:00 và ngày 9 tháng 2 00:00 trong thực tế cùng một thời điểm.
Johan

Câu trả lời:


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

Bạn có thể muốn xem những gì PHP cung cấp: http://php.net/datetime


52
@SamHuckaby: Nó thậm chí còn dễ dàng hơn: $timestamp = strtotime('today');là nửa đêm. Nhưng Pssst một ở trên vẻ bề ngoài lạnh như một câu trả lời cho câu hỏi;)
hakre

Tôi thực sự cần bắt đầu ngày hôm nay và nửa đêm của ngày hôm nay. Làm thế nào tôi có thể tìm thấy ngày bắt đầu của ngày hôm nay, ý tôi là lúc 00:00:00
Happy Coder

3
@AlwinAugustin: Bạn nên cân nhắc để thay đổi cách diễn đạt của mình. Về mặt kỹ thuật, nửa đêm là giữa hai ngày. Vì vậy, có phần nào "không còn ngày hôm nay nữa". Ngoài ra: Midgnight của ngày hôm nay (theo định nghĩa) là (ngay trước đó) bắt đầu của ngày hôm nay. Ý bạn có thể là nửa đêm tiếp theo sau trưa hôm nay .
hakre

vâng thực sự những gì tôi cần là 00:00:00 của ngày hôm nay và 23:59:59 ngày nay
Chúc mừng Coder

2
Hãy nhớ rằng điều này sẽ tạo ra nửa đêm của múi giờ máy chủ PHP của bạn, không phải UTC + 0 ! Để nhận UTC + 0, bạn có thể sử dụng strtotime('today+00:00').
mae

73

Tôi nghĩ rằng bạn nên sử dụng đối tượng DateTime PHP mới vì nó không có vấn đề gì khi thực hiện các ngày vượt quá giới hạn 32 bit mà strtotime () có. Đây là một ví dụ về cách bạn nhận được ngày hôm nay vào lúc nửa đêm.

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

Hoặc nếu bạn đang sử dụng PHP 5.4 trở lên, bạn có thể thực hiện theo cách này:

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

Sau đó, bạn có thể sử dụng echo $today->format('Y-m-d');để lấy định dạng mà bạn muốn đối tượng của mình xuất ra.

Đối tượng DateTime trong PHP


14
Tôi cũng thích sử dụng đối tượng DateTime mới. Nếu bạn kết hợp câu trả lời này với @ hakr's, bạn sẽ nhận được:, new DateTime('today midnight')điều này làm cho ý định rõ ràng hơn (nhưng đây tất nhiên là vấn đề về sở thích).
Martijn

1
Tôi đang thực hiện công việc ORM SQL và tôi phải sử dụng đối tượng DateTime để so sánh. Điều này thật đúng với gì mà tôi đã tìm kiếm. +1
NobleUplift

Có thể là$today = new DateTime('today')
ProgZi

Cũng hữu ích nếu bạn đang sử dụng Carbon, kế thừa từ DateTime. Vì vậy, bạn cũng có thể làm new Carbon('today midnight')và sau đó bạn có thể sử dụng tất cả các công cụ Carbon như thế nào ->subDays(6). Xem carbon.nesbot.com
Christopher K.

Về hạn chế 32 bit: Tài liệu PHP cho strtotime cho biết : "Đối với phiên bản PHP 64 bit, phạm vi hợp lệ của dấu thời gian thực sự là vô hạn, vì 64 bit có thể đại diện cho khoảng 293 tỷ năm theo cả hai hướng." Vì vậy, nó chỉ áp dụng cho php 32bit.
Christopher K.

19

Hôm nay vào lúc nửa đêm. Dễ dàng.

$stamp = mktime(0, 0, 0);

7

Bạn đang tìm cách tính thời gian của sự kiện thiên thể gần đây nhất mà mặt trời đi qua ngay dưới chân bạn, điều chỉnh cho các quy ước địa phương về đánh dấu buổi trưa cao và cũng có khả năng điều chỉnh để mọi người có đủ ánh sáng ban ngày sau khi đi làm về và các cân nhắc chính trị khác.

Đùa giỡn phải không? Thực ra đây là một vấn đề phổ biến nhưng câu trả lời đầy đủ là phụ thuộc vào vị trí:

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

Định nghĩa tiềm năng của “tại đây” được liệt kê tại https://secure.php.net/manual/en/timezones.php


Như strtotime('America/New_York today midnight');thế nào? - 3v4l.org/I85qD
hakre

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

sẽ cung cấp cho bạn những gì bạn đang theo đuổi.

giải trình

Những gì tôi đã làm là sử dụng hàm date của PHP để lấy ngày hôm nay mà không có bất kỳ tham chiếu nào về thời gian, sau đó chuyển nó vào hàm 'string to time' để chuyển đổi ngày và giờ thành dấu thời gian của kỷ nguyên. Nếu nó không có thời gian, nó giả định là giây đầu tiên của ngày đó.

Tài liệu tham khảo: Ngày Chức năng: http://php.net/manual/en/ Chức năng.date.php

Chuỗi theo thời gian: http://us2.php.net/manual/en/ Chức năng.strtotime.php


dấu thời gian? Đó chỉ là một cuộc hẹn hò.
wesside

Có định dạng cụ thể mà OP yêu cầu không? Nếu vậy, tôi rất sẵn lòng sửa đổi bài đăng của mình để trả về bất kỳ định dạng nào họ muốn.
SamHuckaby 29/10/12

hoàn toàn bị bỏ qua strtotime(), tâm trí tập trung vào chức năng ngày. Xin lỗi.
wesside

2

Theo cách đối tượng khác:

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

thí dụ:

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

và:

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');

giống như

$timestamp = strtotime('today');

và nó sẽ ít hoạt động hơn trên máy chủ của bạn.


0

$midnight = strtotime('midnight');là hợp lệ
Bạn cũng có thể thử strtotime('12am')hoặc strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Tôi đã bỏ qua việc thêm ngày hôm nay trước nửa đêm vì mặc định là hôm nay.


0

Nếu bạn đang sử dụng Carbon, bạn có thể làm như sau. Bạn cũng có thể định dạng ngày này để đặt ExpireTiêu đề HTTP.

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

0

Cập nhật câu trả lời vào ngày 19 tháng 4 năm 2020

Đơn giản là chúng ta có thể làm điều này:

$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());


Câu hỏi liên quan đến PHP. Câu trả lời này được viết bằng JavaScript
Electric Coffee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.