2012-02-11 59 views
5

Tôi có 13 chữ số và muốn tạo ngày và thời gian với bao gồm milisecondTạo 3 chữ số Mili giây với php

Ví dụ mã là như thế này đây là kịch bản php của tôi

$mil = 1328910295939; 
$seconds = $mil/1000; 
$showdate = date('Y:m:d H:i:s', $seconds) ; 

echo "$showdate"; 

kết quả là như thế này 2012: 02: 10 15: 44: 55.xxx ===> xxx là 3 miliseconds mà tôi muốn hiển thị.

và làm thế nào để bao gồm 3 chữ số milisecond sau H: i: s

Xin hãy giúp tôi .....

Trả lời

6

Làm thế nào về một cái gì đó như thế này?

$mil = 1328910295939; 

function toTimestamp($milliseconds) 
{ 
    $seconds = $milliseconds/1000; 
    $remainder = round($seconds - ($seconds >> 0), 3) * 1000; 

    return date('Y:m:d H:i:s.', $seconds).$remainder; 
} 

echo toTimestamp($mil); 

Tadaa!

Nó cũng khá nhanh.

Ngoài ra, đây là đầu ra: 2012:02:10 15:44:55.939 - lý do bạn không sử dụng - để phân định phần ngày đánh bại tôi.

+0

Cảm ơn dude ..... công việc tuyệt vời. u là tốt nhất, bởi vì iam tìm kiếm một tuần trên internet không có giải pháp. – Smith

+0

Xin chào westie tôi vẫn gặp vấn đề thời gian HOUR là 2 giờ nhanh hơn ... ví dụ 22: 07: 45.434 một GIỜ nên là 20. – Smith

+0

Đó là một vấn đề với máy chủ của bạn - bạn sẽ cần phải đặt múi giờ. – Westie

5

Chỉ cần cắt bỏ bớt hai ký tự cuối cùng:

substr(date('Y-m-d H:i:s.u',1328910295939), 0, -2) 
+0

Trên hệ thống của tôi, điều này evalutes để "2025/12/10 22: 17: 55,0000" (PHP 5.3.6 trên Ubuntu) – iblue

+0

của nó vẫn không hoạt động .. xin vui lòng giúp tôi iam đóng băng với điều này. – Smith

+0

đây là tập lệnh php của tôi $ mil = 1328910295939; $ giây = $ triệu/1000; $ showdate = date ('Y: m: d H: i: s', $ giây); echo "$ showdate"; kết quả là như thế này 2012: 02: 10 15:44:55 và làm thế nào để bao gồm 3 chữ số milisecond sau H: i: s – Smith

4

Dưới đây là một chức năng sẽ làm điều đó cho bạn chính xác (bằng cách làm tròn, không cắt):

function getTimestamp() 
{ 
     $microtime = floatval(substr((string)microtime(), 1, 8)); 
     $rounded = round($microtime, 3); 
     return date("Y-m-d H:i:s") . substr((string)$rounded, 1, strlen($rounded)); 
} 

Expla quốc gia:

microtime() trả về 2 số dưới dạng 1 chuỗi, được phân tách bằng dấu cách. số thứ 2 là số giây kể từ thời đại unix, và số thứ nhất là số lượng micro giây kể từ số thứ hai. Về cơ bản, số đầu tiên là số lượng micro giây được thể hiện ở định dạng chính xác 8 (0,00000000) và số 0 không bao giờ bị cắt.

Chúng tôi làm tròn độ chính xác này là 3 (0,00) và cắt bỏ hàng đầu 0 và nối thêm vào dấu thời gian thực.

Vì lý do nào đó, tài liệu php cho u, micro giây, dường như không thực sự được hỗ trợ. Tôi nhận được 0,000 mỗi lần khi sử dụng phương pháp đó. Vì vậy, tôi đã sử dụng microtime() làm giải pháp dự phòng.

+0

Ví dụ mã là như thế này đây là kịch bản php của tôi $ triệu = 1328910295939; $ giây = $ triệu/1000; $ showdate = date ('Y: m: d H: i: s', $ giây); echo "$ showdate"; kết quả giống như thế này 2012: 02: 10 15: 44: 55.xxx ===> xxx là 3 miligiây mà tôi muốn hiển thị. – Smith

+1

Định dạng 'u' được hỗ trợ cho các ngày có chứa micro giây (ví dụ:' phiên bản DateTime'). Hàm 'date()' chỉ hoạt động với dấu thời gian nguyên nên không biết về số giây. – salathe

1
$t = 1328910295939; 
echo date('Y-m-d H:i:s.', substr($t, 0, -3)) . substr($t, -3); 

Output: 2012-02-10 16:44:55.939 (nó phụ thuộc vào múi giờ)

0

Bởi vì những câu trả lời đều khá thú vị về độ phức tạp của họ, đây là chưa một câu trả lời cho hậu thế trong tương lai mà sử dụng mã gốc của Người hỏi và doesn' t coi số là chuỗi.

$mil = 1328910295939; 
$seconds = floor($mil/1000); 
$fraction = $mil % 1000; 
$showdate = date('Y:m:d H:i:s',$seconds) . ".$fraction"; 

echo "$mil<br> 
$seconds<br> 
$fraction<br> 
$showdate"; 

đầu ra sau đây trên một máy chủ thiết lập múi giờ EST:

1328910295939 
1328910295 
939 
2012:02:10 16:44:55.939 
Các vấn đề liên quan