2010-05-27 39 views
9

Tôi phải tính chênh lệch thời gian ngày làm thế nào để thực hiện điều đó trong PHP. Tôi cần giờ, phút và giây chính xác. bất kỳ cơ thể có kịch bản cho rằng hãy cho tôi :-Pcách tính chênh lệch thời gian trong PHP

+14

Điều này nghe có vẻ như bài tập về nhà –

+5

Google là bạn của bạn. (Và đối với một ai đó như là một tuyên bố "php học viên" bạn dường như không mong muốn tìm hiểu ...) –

+0

... làm thế nào để giải thích DST crossover? – symcbean

Trả lời

0

Chức năng datediff tại addedbytes.com cho phép bạn chỉ là một cách dễ dàng :)

+2

Tại sao lại sử dụng chức năng lỗi cũ như thế này khi lớp DateTime có chức năng này được tích hợp sẵn? – vascowhite

8

Kiểm tra này .. Điều này sẽ làm việc

<?php 

function timeDiff($firstTime,$lastTime) 
{ 

// convert to unix timestamps 
$firstTime=strtotime($firstTime); 
$lastTime=strtotime($lastTime); 

// perform subtraction to get the difference (in seconds) between times 
$timeDiff=$lastTime-$firstTime; 

// return the difference 
return $timeDiff; 
} 

//Usage : 
echo timeDiff("2002-04-16 10:00:00","2002-03-16 18:56:32"); 

?> 
+0

Hi vimard cảm ơn bạn đã phát lại có giá trị. Thực ra tôi muốn hiển thị độ tuổi của các tệp như trong facebook hoặc orkut. chúng hiển thị thời gian, ngày, tuần, hiển thị dựa trên năm. –

+1

để giải quyết vấn đề của bạn ... – Vimard

+0

@Vimard anh ta muốn (4 năm trước) để thấy sự khác biệt trong ngày, tuần, năm không giây. –

0

Đối với một cái gì đó như thế, hãy sử dụng hàm int time() được tích hợp sẵn.

  • Store giá trị của time(); cái gì đó như 1274467343 đó là số giây scince
  • Khi bao giờ cần truy xuất giá trị và gán nó vào $erlierTime.
  • Gán time() một lần nữa để sau này thời gian dừng bạn muốn, cho phép chỉ gọi nó $latterTime

Vì vậy, bây giờ bạn có cái gì đó như $erlierTime$latterTime.

Không chỉ làm $latterTime - $erlierTime để có được sự khác biệt trong vài giây và sau đó làm đơn vị của bạn để có được tê phút trôi qua, num giờ trôi qua, vv


Để cho tôi hay bất kỳ ai cung cấp cho bạn một hoàn thành kịch bản bạn sẽ cần phải cho chúng tôi biết môi trường của bạn là như thế nào và bạn đang làm việc với mysql, sqlite vv ... cũng sẽ cần phải biết làm thế nào mà bộ đếm thời gian được kích hoạt.

7

Điều này sẽ hoạt động, chỉ cần thay thế thời gian trong thời gian khác với thời gian tác vụ bắt đầu và thời gian hiện tại hoặc thời gian tác vụ đã kết thúc. Đối với một bộ đếm liên tục thời gian bắt đầu sẽ được lưu trữ trong một cơ sở dữ liệu, hoặc cho thời gian trôi qua cho một nhiệm vụ thời gian kết thúc sẽ cũng

function timeDiff($firstTime,$lastTime){ 
    // convert to unix timestamps 
    $firstTime=strtotime($firstTime); 
    $lastTime=strtotime($lastTime); 

    // perform subtraction to get the difference (in seconds) between times 
    $timeDiff=$lastTime-$firstTime; 

    // return the difference 
    return $timeDiff; 
} 

//Usage : 
$difference = timeDiff("2002-03-16 10:00:00",date("Y-m-d H:i:s")); 
$years = abs(floor($difference/31536000)); 
$days = abs(floor(($difference-($years * 31536000))/86400)); 
$hours = abs(floor(($difference-($years * 31536000)-($days * 86400))/3600)); 
$mins = abs(floor(($difference-($years * 31536000)-($days * 86400)-($hours * 3600))/60));#floor($difference/60); 
echo "<p>Time Passed: " . $years . " Years, " . $days . " Days, " . $hours . " Hours, " . $mins . " Minutes.</p>"; 
0

Giải pháp tốt nhất là nên sử dụng mã tùy chỉnh của bạn, có rất nhiều built- trong các chức năng trong php có thể cho phép bạn làm điều đó một cách dễ dàng. Date, strtotimetime.

  1. Lần đầu tiên chuyển đổi bất kỳ ngày nào của bạn từ định dạng "Y-m-d H: i: s" sang dấu thời gian Linux bằng chức năng strtotime.
  2. Thực hiện phép tính và sử dụng time để có dấu thời gian hiện tại nếu có.
  3. Chuyển đổi bạn đã tính toán dấu thời gian cho các ngày bằng cách sử dụng chức năng date.
0

Bạn phải chuyển đổi ngày giờ bắt đầu và thời gian kết thúc của mình thông qua strtotime.

sau khi trừ thời gian bắt đầu từ thời gian kết thúc.

sau khi vượt qua sự khác biệt đó với định dạng ngày hoặc giờ bạn cần ...

để bạn sẽ nhận được sự khác biệt chính xác giữa hai ngày.

20

Sử dụng diff() method của PHP DateTime class như thế này: -

$lastWeek = new DateTime('last thursday'); 
$now = new DateTime(); 
var_dump($now->diff($lastWeek, true)); 

này sẽ cung cấp cho bạn một đối tượng DateInterval: -

object(DateInterval)[48] 
    public 'y' => int 0 
    public 'm' => int 0 
    public 'd' => int 2 
    public 'h' => int 11 
    public 'i' => int 34 
    public 's' => int 41 
    public 'invert' => int 0 
    public 'days' => int 2 

Lấy các giá trị mà bạn muốn từ đó là tầm thường.

Các vấn đề liên quan