Hướng dẫn php get start of day - php bắt đầu ngày mới

Tôi có một dấu thời gian unix như thế này:

$timestamp=1330581600

Làm thế nào để tôi có được sự khởi đầu của ngày và cuối ngày cho dấu thời gian đó?

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

Tôi đã thử điều này:

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

Nhưng tôi không nghĩ rằng nó sẽ hoạt động vì bản thân dấu thời gian không phải là chính xác đầu ngày.

Hướng dẫn php get start of day - php bắt đầu ngày mới

Jonik

78.6K70 Huy hiệu vàng257 Huy hiệu bạc367 Huy hiệu đồng70 gold badges257 silver badges367 bronze badges

Hỏi ngày 17 tháng 4 năm 2012 lúc 19:33Apr 17, 2012 at 19:33

2

Strtotime có thể được sử dụng để nhanh chóng cắt giảm giờ/phút/giây

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

DateTime cũng có thể được sử dụng, mặc dù yêu cầu thêm một vài bước để có được từ một thời gian dài

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

$beginOfDay = clone $dtNow;
$beginOfDay->modify('today');

$endOfDay = clone $beginOfDay;
$endOfDay->modify('tomorrow');
// adjust from the start of next day to the end of the day,
// per original question
// Decremented the second as a long timestamp rather than the
// DateTime object, due to oddities around modifying
// into skipped hours of day-lights-saving.
$endOfDateTimestamp = $endOfDay->getTimestamp();
$endOfDay->setTimestamp($endOfDateTimestamp - 1);

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

Với việc bổ sung thời gian kéo dài trong PHP7, có khả năng bỏ lỡ một giây nếu sử dụng kiểm tra

$endOfDay = $timestamp + (60 * 60 * 23);
4 với điều này. Sử dụng kiểm tra
$endOfDay = $timestamp + (60 * 60 * 23);
5 sẽ tránh được khoảng cách đó, ngoài những điều kỳ lạ xung quanh việc trừ đi giây và tiết kiệm ánh sáng ban ngày trong xử lý thời gian của PHP.

Đã trả lời ngày 17 tháng 4 năm 2012 lúc 19:39Apr 17, 2012 at 19:39

Rrehbeinrrehbeinrrehbein

4.0901 Huy hiệu vàng17 Huy hiệu bạc23 Huy hiệu đồng1 gold badge17 silver badges23 bronze badges

8

Chỉ là 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();

Đầu tiên một đối tượng DateTime đượ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 cài đặt giờ/phút/giây đến đầu hoặc cuối ngày. Cuối cùng, một đối tượng DateTime mới được tạo từ chuỗi này và dấu thời gian được truy xuất.

Có thể đọc được

$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 ta có thể kết thúc ngày một cách thay thế bằng cách sử dụng phiên bản dài hơn này:

$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ờ

Timezone cũng có thể được đặt bằng cách thêm chỉ báo dấu thời gian vào định dạng như

$endOfDay = $timestamp + (60 * 60 * 23);
6 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 thông tin khác như đầu/cuối tháng hoặc đầu/kết thúc giờ bằng cách thay đổi định dạng thứ hai được chỉ định. Trong tháng:

$endOfDay = $timestamp + (60 * 60 * 23);
7 và
$endOfDay = $timestamp + (60 * 60 * 23);
8. Trong giờ:
$endOfDay = $timestamp + (60 * 60 * 23);
9 và
$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
0

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ể có được sự khởi đầu hoặc kết thúc của bất kỳ giai đoạn nào, mặc dù một số sự quan tâm sẽ cần được thực hiện để xử lý chính xác các năm nhảy.

Liên kết liên quan

Từ các tài liệu PHP:

  • Ngày giờ
  • Ngày với thông tin về định dạng
  • Datetimezone
  • Ngày

Đã trả lời ngày 4 tháng 1 năm 2016 lúc 18:07Jan 4, 2016 at 18:07

3

Bạn có thể sử dụng kết hợp

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
1 và
$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
2:

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

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
2 đủ thông minh để bọc tháng/năm khi được cho một ngày ngoài tháng được chỉ định (ngày 32 tháng 1 sẽ là ngày 1 tháng 2, v.v.)

Đã trả lời ngày 17 tháng 4 năm 2012 lúc 19:38Apr 17, 2012 at 19:38

Tính toánCal

7.03724 Huy hiệu bạc28 Huy hiệu đồng24 silver badges28 bronze badges

Bạn có thể chuyển đổi thời gian sang dữ liệu hiện tại và sau đó sử dụng hàm strtotime để tìm sự khởi đầu của ngày và chỉ cần thêm 24 giờ vào đó để tìm kết thúc ngày.

Bạn cũng có thể sử dụng toán tử còn lại (%) để tìm ngày gần nhất. Ví dụ:

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

Đã trả lời ngày 17 tháng 4 năm 2012 lúc 19:36Apr 17, 2012 at 19:36

CameroncameronCameron

9901 Huy hiệu vàng9 Huy hiệu bạc 20 Huy hiệu đồng1 gold badge9 silver badges20 bronze badges

3

Câu trả lời được chấp nhận không may bị phá vỡ do lỗi PHP xảy ra trong các tình huống rất cụ thể. Tôi sẽ thảo luận về những kịch bản đó, nhưng trước tiên là câu trả lời bằng cách sử dụng DateTime. Sự khác biệt duy nhất giữa câu trả lời này và câu trả lời được chấp nhận xảy ra sau dòng

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
4:

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

Vì vậy, bạn sẽ lưu ý rằng thay vì sử dụng

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
5, thay vào đó, chúng tôi có được dấu thời gian và trừ đi. Câu trả lời được chấp nhận bằng cách sử dụng
$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
6 nên hoạt động, nhưng bị phá vỡ vì lỗi PHP trong các kịch bản rất cụ thể. Lỗi này xảy ra trong múi giờ thay đổi tiết kiệm ánh sáng ban ngày vào lúc nửa đêm, vào ngày trong năm mà đồng hồ được di chuyển "về phía trước". Dưới đây là một ví dụ bạn có thể sử dụng để xác minh lỗi đó.

Mã ví dụ lỗi

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

Đầu ra mã ví dụ lỗi

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

Đã trả lời ngày 18 tháng 10 năm 2019 lúc 14:41Oct 18, 2019 at 14:41

KayakinkoderkayakinkoderKayakinKoder

2.9273 Huy hiệu vàng20 Huy hiệu bạc35 Huy hiệu Đồng3 gold badges20 silver badges35 bronze badges

Hôm nay thời gian bắt đầu ngày. Giản dị

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

Đã trả lời ngày 19 tháng 5 năm 2016 lúc 6:56May 19, 2016 at 6:56

Hướng dẫn php get start of day - php bắt đầu ngày mới

GaneshganeshGanesh

Huy hiệu bạc 11411 silver badge9 bronze badges

1

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

Nếu bạn cần cả hai giá trị trong cùng một tập lệnh. Nó nhanh hơn đến +/- 86400 giây cho một trong các biến hơn là bắn cả sàn và trần. Ví dụ:

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

Đã trả lời ngày 22 tháng 3 năm 2016 lúc 22:56Mar 22, 2016 at 22:56

Hướng dẫn php get start of day - php bắt đầu ngày mới

KareemkareemKareem

4.73540 Huy hiệu bạc36 Huy hiệu đồng40 silver badges36 bronze badges

Đối với bất kỳ ai có câu hỏi này trong tương lai:

Bất kỳ mã ngày nào

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

Mã ngày hiện tại

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

Đã trả lời ngày 30 tháng 3 năm 2015 lúc 9:29Mar 30, 2015 at 9:29

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

Đã trả lời ngày 29 tháng 4 năm 2021 lúc 13:39Apr 29, 2021 at 13:39

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

Điều này làm việc cho tôi :)

Đã trả lời ngày 17 tháng 5 năm 2021 lúc 13:21May 17, 2021 at 13:21

Một chút muộn cho bữa tiệc, nhưng đây là một cách dễ dàng khác để đạt được những gì bạn đang tìm kiếm:

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

Cá nhân tôi sẽ tránh sử dụng cuối ngày trừ khi nó hoàn toàn cần thiết. Tất nhiên, bạn có thể sử dụng

$beginOfDay = strtotime("today", $timestamp);
$endOfDay   = strtotime("tomorrow", $beginOfDay) - 1;
7 nhưng đây không phải là cuối ngày thực tế (vẫn còn 1 giây còn lại). Những gì tôi làm là sử dụng bắt đầu vào ngày hôm sau làm ranh giới kết thúc của tôi, ví dụ:

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

Nếu tôi phải sử dụng cuối ngày, tôi sẽ tính toán bắt đầu vào ngày hôm sau và sau đó trừ đi 1 micro giây từ đó.microsecond from that.

Hướng dẫn php get start of day - php bắt đầu ngày mới

Tyler2P

2.28116 Huy hiệu vàng20 Huy hiệu bạc29 Huy hiệu đồng16 gold badges20 silver badges29 bronze badges

Đã trả lời ngày 9 tháng 11 năm 2021 lúc 15:55Nov 9, 2021 at 15:55

Hướng dẫn php get start of day - php bắt đầu ngày mới

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

Bạn có thể đặt múi giờ bằng cách thay thế "Châu Á/Tehran". Một ngày là 86400 giây, đừng hỏi tôi tại sao 86399, đó là một lời thì thầm trong tâm trí tôi nói rằng đó là 86399, vì vậy tôi thậm chí không muốn nghĩ về sự thật của nó.

Đã trả lời ngày 18 tháng 2 lúc 20:47Feb 18 at 20:47

Bọt Amir choAmir Fo

4.5141 Huy hiệu vàng39 Huy hiệu bạc46 Huy hiệu đồng1 gold badge39 silver badges46 bronze badges

Làm thế nào có thể có được ngày đầu tiên của năm hiện tại trong PHP?

Về cơ bản ngày ('y') trả về giá trị của năm hiện tại. Và ngày đầu tiên của mỗi năm bắt đầu như 2000-01-01. Vì vậy, $ firstdate = date ('y'). ....
Tôi đã định giải thích nó trong câu trả lời của bạn ... bạn có thể chỉnh sửa nó bất cứ lúc nào! - FZS. ....
cho năm hiện tại ngày đầu tiên, điều này sẽ thực hiện $ startDate = date ('y-01-01'); - Kennedy Maikuma ..

Làm thế nào có thể kết thúc ngày trong PHP?

Chúng tôi sẽ sử dụng hàm date () và strtotime () để có được ngày cuối cùng của tháng.Các hàm PHP đã sử dụng: Hàm ngày (): Định dạng thời gian/ngày cục bộ.Chức năng strtotime (): phân tích về bất kỳ mô tả dữ liệu văn bản tiếng Anh nào vào dấu thời gian UNIX.use date() and strtotime() function to get the last day of the month. Used PHP functions: date() function: Format a local time/date. strtotime() function: Parse about any English textual datetime description into a Unix timestamp.

Làm thế nào để tôi có được đầu tuần trong PHP?

Sử dụng hàm strtotime () để có được ngày đầu tiên trong tuần bằng PHP.Hàm này trả về thời gian thời gian biến thời gian mặc định và sau đó sử dụng hàm ngày () để chuyển đổi ngày Dấu thời gian thành ngày có thể hiểu được.. This function returns the default time variable timestamp and then use date() function to convert timestamp date into understandable date.

Làm thế nào để bạn có được ngày đầu tiên của tháng trong PHP?

Làm thế nào tôi có thể nhận được ngày đầu tiên và ngày của tháng trước trong PHP ?..
$ query_date = '2010-02-04' ;.
// Ngày đầu tiên của tháng ..
Ngày Echo ('y-m-01', strtotime ($ query_date)) ;.
// Ngày cuối cùng của tháng ..
ngày vang ('y-m-t', strtotime ($ query_date)) ;.