Just 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();
Đối tượng DateTime đầu tiên được tạo và dấu thời gian được đặt thành dấu thời gian mong muốn. Sau đó, đối tượng được định dạng dưới dạng chuỗi thiết lập giờ/phút/giây thành đầu hoặc cuối ngày. Cuối cùng, một đối tượng DateTime mới được tạo ra từ chuỗi này và dấu thời gian được lấy ra.
Readable
$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();
Chúng tôi có thể nhận được vào cuối ngày một cách thay thế bằng phiên bản này còn:
$endOfDayObject = clone $beginOfDayOject(); // Cloning because add() and sub() modify the object
$endOfDayObject->add(new DateInterval('P1D'))->sub(new DateInterval('PT1S'));
$endOfDay = $endOfDayOject->getTimestamp();
múi giờ
Các múi giờ có thể được thiết lập như cũng bằng cách thêm một chỉ báo dấu thời gian theo định dạng như O
và chỉ định dấu thời gian sau khi tạo đối tượng 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();
Tính linh hoạt của DateTime
Chúng tôi cũng có thể nhận được các thông tin khác như đầu/cuối tháng hoặc đầu/cuối giờ bằng cách thay đổi định dạng thứ hai quy định. Trong tháng: 'Y-m-01 00:00:00'
và 'Y-m-t 23:59:59'
. Đối với giờ: 'Y-m-d H:00:00'
và 'Y-m-d H:59:59'
Sử dụng các định dạng khác nhau kết hợp với các đối tượng add()/sub() và DateInterval, chúng ta có thể bắt đầu hoặc kết thúc bất kỳ khoảng thời gian nào. đúng.
Liên kết liên quan
Từ các tài liệu PHP:
Nguồn
2016-01-04 18:07:59
Nếu GMT, có thể là: $ boundary = floor/ceil ($ timestamp/(60 * 60 * 24)) * (60 * 60 * 24); – hakre
Nếu đầu ra mong đợi của bạn là dấu thời gian dưới dạng số nguyên thì có một lớp lót đơn giản: $ beginOfDay = mktime (0, 0, 0, ngày ('n'), ngày ('j') - 1); $ endOfDay = mktime (0, 0, 0, ngày ('n'), ngày ('j')); – jarederaj