Hướng dẫn php date diff in seconds - php ngày khác nhau tính bằng giây

Do các hạn chế của UNIX Epoch, bạn có thể gặp vấn đề về ngày tổng hợp trước năm 1970 và sau năm 2038. Tôi chọn mất độ chính xác (= không nhìn vào giây duy nhất) nhưng tránh để vượt qua các chuyển đổi Epoch Máng (GetTimestamp). Nó phụ thuộc vào những gì bạn đang làm để làm ...

Trong trường hợp của tôi, sử dụng 365 thay vào đó (12*30) và "30" làm chiều dài tháng trung bình, giảm lỗi trong đầu ra có thể sử dụng được.

function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds
    $diff = $end->diff($start);
    $diff_sec = $diff->format('%r').( // prepend the sign - if negative, change it to R if you want the +, too
                ($diff->s)+ // seconds (no errors)
                (60*($diff->i))+ // minutes (no errors)
                (60*60*($diff->h))+ // hours (no errors)
                (24*60*60*($diff->d))+ // days (no errors)
                (30*24*60*60*($diff->m))+ // months (???)
                (365*24*60*60*($diff->y)) // years (???)
                );
    return $diff_sec;
}

Lưu ý rằng lỗi có thể là 0, nếu số lượng "trung bình" được dành cho Diff. Các tài liệu PHP không nói về điều này ... trong trường hợp xấu, lỗi có thể là:

  • 0 giây nếu khác nhau được áp dụng cho khoảng trống thời gian <1 tháng
  • 0 đến 3 ngày nếu khác nhau được áp dụng cho khoảng trống thời gian> 1 tháng
  • 0 đến 14 ngày nếu khác nhau được áp dụng cho khoảng trống thời gian> 1 năm

Tôi thích cho rằng ai đó đã quyết định xem xét "M" là 30 ngày và "y" là 365, tính phí "D" với sự khác biệt khi "Diff" đi bộ vào 30 tháng tháng ...

Nếu ai đó biết điều gì đó nhiều hơn về điều này và có thể cung cấp tài liệu chính thức, được chào đón!

Theo mặc định, không có phương pháp nào có sẵn trên lớp DateTime hoặc DateInterval để có được sự khác biệt giữa hai đối tượng DateTime tính bằng giây. Do đó, bạn có thể có được sự khác biệt của dấu thời gian của hai ngày hoặc tự tính số giây:

So sánh dấu thời gian để có số giây giữa hai ngày

Chúng ta chỉ có thể so sánh dấu thời gian của hai ngày để có được sự khác biệt trong vài giây. Ví dụ:

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600

Xin lưu ý rằng so sánh dấu thời gian có thể dẫn đến các vấn đề với ngày trước năm 1970 và sau năm 2038.

Tính toán số giây giữa hai ngày

Bạn có thể tính số giây giữa hai ngày theo cách sau:

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');
$diff = $start->diff($end);

$daysInSecs = $diff->format('%r%a') * 24 * 60 * 60;
$hoursInSecs = $diff->h * 60 * 60;
$minsInSecs = $diff->i * 60;

$seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s;

echo $seconds; // output: 284169600

Tính toán hoạt động theo cách sau:

  • Sử dụng ký tự định dạng %r, thêm dấu trừ khi kết quả là âm;
  • Sử dụng ký tự định dạng %a cho chúng ta tổng số ngày giữa hai ngày;
  • Sử dụng định dạng %r%a cùng nhau, chúng ta có thể nhận được số ngày âm/dương. Sử dụng điều đó, chúng ta có thể chuyển số ngày thành vài ngày bằng cách nhân nó với giờ trong một ngày, vài phút trong một giờ và vài giây trong một phút (tức là ____10);
  • Việc tính toán trong bước cuối cùng không tính đến số giờ, phút và giây trong chênh lệch ngày (vì chúng không được bao gồm ở định dạng %a). Để bao gồm những thứ đó, chúng tôi chỉ cần sử dụng các thuộc tính giờ, phút và thứ hai có sẵn trên đối tượng DateInterval và chuyển chúng thành vài giây như trong ví dụ trên.


Hy vọng bạn tìm thấy bài viết này hữu ích. Nó đã được xuất bản ngày 01 tháng 1 năm 2021. Vui lòng thể hiện tình yêu và sự hỗ trợ của bạn bằng cách chia sẻ bài đăng này.

DateTimeImmutable::diff

DateTime::diff

date_diff

(Php 5> = 5.3.0, Php 7, Php 8)

DateTimeInterface :: Diff - DateTimeIMmutable :: Diff - DateTime :: Diff - Date_Diff - Trả về sự khác biệt giữa hai đối tượng DateTime -- DateTimeImmutable::diff -- DateTime::diff -- date_diffReturns the difference between two DateTime objects

Sự mô tả

Phong cách hướng đối tượng

Thông số

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
3

Ngày để so sánh với.

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
4

Khoảng thời gian có nên bị buộc là tích cực?

Trả về giá trị

Đối tượng DateInterVal đại diện cho sự khác biệt giữa hai ngày.DateInterval object represents the difference between the two dates.

Giá trị trả về cụ thể hơn biểu thị khoảng thời gian đồng hồ để áp dụng cho đối tượng ban đầu (

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
5 hoặc
$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
6) để đến
$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
7. Quá trình này không phải lúc nào cũng có thể đảo ngược.

Phương pháp này nhận thức được các thay đổi DST và do đó có thể trả về một khoảng

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
8, theo một trong các ví dụ. Nếu bạn muốn tính toán theo thời gian tuyệt đối, bạn cần chuyển đổi cả ________ 15/________ 20 và
$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
7 sang UTC trước.

Ví dụ

Ví dụ #1 DateTimeIMMutable :: Diff () Ví dụDateTimeImmutable::diff() example

Phong cách hướng đối tượng

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');
$diff = $start->diff($end);

$daysInSecs = $diff->format('%r%a') * 24 * 60 * 60;
$hoursInSecs = $diff->h * 60 * 60;
$minsInSecs = $diff->i * 60;

$seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s;

echo $seconds; // output: 284169600
2

Thông số

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');
$diff = $start->diff($end);

$daysInSecs = $diff->format('%r%a') * 24 * 60 * 60;
$hoursInSecs = $diff->h * 60 * 60;
$minsInSecs = $diff->i * 60;

$seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s;

echo $seconds; // output: 284169600
3

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
3

Ngày để so sánh với.DateTimeInterface::diff() during DST changeover

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');
$diff = $start->diff($end);

$daysInSecs = $diff->format('%r%a') * 24 * 60 * 60;
$hoursInSecs = $diff->h * 60 * 60;
$minsInSecs = $diff->i * 60;

$seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s;

echo $seconds; // output: 284169600
4

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
4

Khoảng thời gian có nên bị buộc là tích cực?DateTime object comparison

Trả về giá trị:

Đối tượng DateInterVal đại diện cho sự khác biệt giữa hai ngày. and DateTime objects can be compared using comparison operators.

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');
$diff = $start->diff($end);

$daysInSecs = $diff->format('%r%a') * 24 * 60 * 60;
$hoursInSecs = $diff->h * 60 * 60;
$minsInSecs = $diff->i * 60;

$seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s;

echo $seconds; // output: 284169600
5

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
4

bool(false)
bool(true)
bool(false)

Khoảng thời gian có nên bị buộc là tích cực?

  • Trả về giá trị
  • Đối tượng DateInterVal đại diện cho sự khác biệt giữa hai ngày.
  • Giá trị trả về cụ thể hơn biểu thị khoảng thời gian đồng hồ để áp dụng cho đối tượng ban đầu (
    $start = new DateTime('2011-12-31 00:00:00');
    $end = new DateTime('2021-01-01 00:00:00');
    
    echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
    
    5 hoặc
    $start = new DateTime('2011-12-31 00:00:00');
    $end = new DateTime('2021-01-01 00:00:00');
    
    echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
    
    6) để đến
    $start = new DateTime('2011-12-31 00:00:00');
    $end = new DateTime('2021-01-01 00:00:00');
    
    echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
    
    7. Quá trình này không phải lúc nào cũng có thể đảo ngược.

Phương pháp này nhận thức được các thay đổi DST và do đó có thể trả về một khoảng

$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
8, theo một trong các ví dụ. Nếu bạn muốn tính toán theo thời gian tuyệt đối, bạn cần chuyển đổi cả ________ 15/________ 20 và
$start = new DateTime('2011-12-31 00:00:00');
$end = new DateTime('2021-01-01 00:00:00');

echo $end->getTimestamp() - $start->getTimestamp(); // output: 284169600
7 sang UTC trước.

Làm thế nào tôi có thể nhận được ngày thứ hai giữa hai ngày trong PHP?

Php PHP nhận được vài giây giữa 2 lần mã câu trả lời..
$ d1 = DateTime mới ("2018-01-10 00:00:00") ;.
$ d2 = DateTime mới ("2019-05-18 01:23:45") ;.
$ intercal = $ d1-> diff ($ d2) ;.
$ diffinSeconds = $ intercal-> s; // 45 ..
$ diffinMinutes = $ intercal-> i; // 23 ..
$ diffinhours = $ intercal-> h; //số 8..
$ diffindays = $ intercal-> d; // 21 ..

Làm thế nào tôi có thể nhận được phút giữa hai ngày trong PHP?

$ min = $ internal -> ngày * 24 * 60; $ min += $ intercal -> h * 60; $ min += $ intercal -> i; // in kết quả trong định dạng phút. $min += $interval ->h * 60; $min += $interval ->i; // Printing the Result in Minutes format.

Làm thế nào tôi có thể so sánh hai lần trong PHP?

Phương pháp diff () của lớp DateTime tạo ra một đối tượng DateInterval tính toán chênh lệch giữa hai đối tượng ngày/thời gian theo thời gian (tổng số ngày, năm, tháng, ngày, giờ, phút, giây, v.v.).$ datetime_1 = '2022-04-10 11:15:30';$ datetime_2 = '2022-04-12 13:30:45';$ start_dateTime = new DateTime ($ datetime_1); (total days, years, months, days, hours, minutes, seconds, etc.). $datetime_1 = '2022-04-10 11:15:30'; $datetime_2 = '2022-04-12 13:30:45'; $start_datetime = new DateTime($datetime_1);

Làm thế nào để bạn tính toán giây giữa hai lần?

Để có được tổng số giây giữa hai lần, bạn nhân chênh lệch thời gian với 86400, đó là số giây trong một ngày (24 giờ * 60 phút * 60 giây = 86400).Ghi chú.multiply the time difference by 86400, which is the number of seconds in one day (24 hours * 60 minutes * 60 seconds = 86400). Note.