2011-05-18 33 views
10

gì cách tốt nhất để chuyển đổi 24 giờ thời gian để giây để nó có thể được sử dụng để so sánh câu lệnh if ..Chuyển đổi thời gian để giây

function HourMinuteToDecimal($hour_minute) { 
     $t = explode(':', $hour_minute); 
     return $t[0] * 60 + $t[1]; 
} 

echo HourMinuteToDecimal("23:30"); 
return 1410 

Nếu bạn cố gắng để chuyển đổi thời gian nửa đêm (00:00) đến giây , nó sẽ không làm việc. Giải pháp này là gì?

00:00, 00:30, 01:00, 01:30, vv

if (HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30")) { .. } 

này sẽ không làm việc.

+3

khi bạn nói chuyển đổi '00: 00 'sẽ không hoạt động, ý của bạn là gì? Nó sẽ cho kết quả trong không giây, nhưng đó là chính xác phải không? Nếu bạn muốn 00:00 có nghĩa là 24 giờ thay vì 0 giờ, thì bạn sẽ cần phải làm cho nó trở thành một trường hợp đặc biệt. – Spudley

+0

Thats đúng, khi bạn nói trường hợp đặc biệt ... như thế nào? Tôi có mã một cái gì đó như thế này: if (HourMinuteToDecimal ("01:30")> HourMinuteToDecimal ("23:30")) {..} Đó woudnt làm việc như mong đợi .. Làm thế nào để khắc phục vấn đề này? – user622378

+2

@ user622378: Để giải quyết "vấn đề", bạn phải nêu rõ vấn đề là gì. Bạn nói "điều này sẽ không hoạt động" và "điều đó sẽ không hoạt động như mong đợi", nhưng không tiếp tục nói _why_. Tôi không thấy vấn đề ở đây. –

Trả lời

6

Để chuyển đổi chức năng:

function hoursToSecods ($hour) { // $hour must be a string type: "HH:mm:ss" 

    $parse = array(); 
    if (!preg_match ('#^(?<hours>[\d]{2}):(?<mins>[\d]{2}):(?<secs>[\d]{2})$#',$hour,$parse)) { 
     // Throw error, exception, etc 
     throw new RuntimeException ("Hour Format not valid"); 
    } 

     return (int) $parse['hours'] * 3600 + (int) $parse['mins'] * 60 + (int) $parse['secs']; 

} 

Write on the fly, không có thử nghiệm :-P

như vậy, bạn có thể sử dụng strtotime để chuyển đổi các định dạng ngày trong unix timestamp và comparte sử dụng một nhà khai thác standar (== <>> = < = =, vv) ví dụ:!

$t1 = "23:40:12"; 
$t2 = "17:53:04"; 

$h1 = strtotime("0000-00-00 $t1"); 
$h2 = strtotime("0000-00-00 $t2"); 

$h1 == $h2; // if are equals 
$h1 > $h2; // if h1 is mayor at h2 
$h1-$h2; // dieference in seconds, etc. 

vv ..

+0

$ t1 = hoursToSecods ("00:00:00"); Sẽ không làm việc. 00:00:00 có thể là 12h00 – user622378

+1

có, nhưng nếu bạn đọc câu hỏi; "Cách tốt nhất để chuyển đổi 24 giờ thành giây để nó có thể được sử dụng để so sánh nếu câu lệnh ..", 00:00:00 là 0 giây trong ngày. – Exos

0

Bạn có thể so sánh các đối tượng thuộc loại time bằng cách sử dụng các toán tử chuẩn <, >, ==. Sử dụng strtotime để chuyển đổi chuỗi thành thời gian, sau đó so sánh.

+0

Không chắc chắn những gì bạn có ý nghĩa bởi các đối tượng của thời gian loại. Thời gian được lưu trữ trong cơ sở dữ liệu sử dụng loại trường 'thời gian'. 17:00:00, 178: 00: 00, 00:00:00, 01:00:00, vv – user622378

+0

Khi bạn tải các giá trị thời gian từ cơ sở dữ liệu, chúng sẽ là các chuỗi. Sử dụng 'strtotime' để chuyển đổi các chuỗi đó thành thời gian. –

+0

Tôi không nghĩ chúng ta nên mang theo các dấu thời gian UNIX vào nó. Chúng tôi không giao dịch với ngày tháng. –

4

Bạn dường như đang hỏi những điều mâu thuẫn.

  • Bạn muốn chuyển đổi thời gian trong HH:MM thành giây.
  • Nhưng sau đó bạn muốn "so sánh" kết quả từ các thời điểm khác nhau, như thể chúng có ngày đính kèm.

Nếu bạn muốn cho phép HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30") là đúng mà không có ngày, thì, mọi so sánh sẽ trả về true.

Nếu bạn muốn thực hiện điều này đúng cách, hãy bao gồm ngày (YYYY-MM-DD HH:MM:SS) và sử dụng strtotime trong PHP để nhận số giây kể từ kỷ nguyên UNIX.


Ngoài ra, hàm của bạn sẽ trả về phút, không giây.

+0

Tôi có thể bao gồm YYYY-MM-DD bằng cách nào? Tôi đã có hơn 8.000 hàng Thời gian không có ngày. Vì vậy, 23:30 sẽ là 2011-05-18 23:30:30 và 00:00 là 2011-05-19 00:00:00? – user622378

+0

@ user622378: Mã của bạn được đoán như thế nào vào ngày nào? Hay bạn có ý định sử dụng "bây giờ" làm điểm mấu chốt? –

+0

Ví dụ: $ nowTime = HourMinuteToDecimal (ngày ('H: i')); $ OpenTime = HourMinuteToDecimal ($ data ['Result'] [$ key] ['opentime']); if ($ nowTime> $ OpenTime) {..} Nó hoạt động nhưng không phải khi thời gian qua 00:00 – user622378

10

PHP5.3

$formattedTime = '00:01:38'; 
$seconds = strtotime('1970-01-01 ' . $formattedTime . 'GMT') 
+0

Điểm 1970 là gì? –

+0

@MuhammadbinYusrat https://en.wikipedia.org/wiki/Unix_time –

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