2016-08-29 19 views
5

Tôi gặp sự cố khi lặp lại dấu thời gian unix chính xác cho ngày được lưu trong cơ sở dữ liệu.strtotime và ngày không xuất chính xác

$activeWorkRow['WorkDate'] = "9/24/2015 1:45:53 PM"; 
$locateDate = $activeWorkRow['WorkDate']; 
$locateDate = str_replace('/', '-', $locateDate); 
//$locateDate = date('m-d-Y', strtotime($locateDate)); 
//$locateDate = strtotime(date($locateDate)); 

echo $locateDate."<br>"; 

Output:

9-24-2015 1:45:53 PM 

Tiếp theo:

$locateDate = $activeWorkRow['WorkDate']; 
$locateDate = str_replace('/', '-', $locateDate); 
$locateDate = date('m-d-Y', strtotime(locateDate)); 
//$locateDate = strtotime(date($locateDate)); 

Output:

12-31-1969 

tôi đang cố gắng để có được các dấu thời gian unix để tôi có thể so sánh nó với những người khác .

+0

Máy chủ của bạn là múi giờ nào? –

+0

múi giờ trung tâm –

Trả lời

0

Nếu bạn đang sử dụng MySQL, bạn có thể nói:

mysql SELECT UNIX_TIMESTAMP();

<?php 
$hostname="your_hostname"; 
$username="your_username"; 
$password="your_password"; 
$db = "your_dbname"; 
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password); 
foreach($dbh->query('SELECT UNIX_TIMESTAMP()') as $row) { 
    echo "<tr>"; 
    echo "<td>" . $row['UNIX_TIMESTAMP()'] . "</td>"; 
    echo "</tr>"; 
} 
?> 

hoặc nếu bạn cần thời gian Stamp Unix cho một ngày thử quy định:

mysql> CHỌN UNIX_TIMESTAMP ('2016/01/01 00:00:00');

<?php 
$hostname="your_hostname"; 
$username="your_username"; 
$password="your_password"; 
$db = "your_dbname"; 
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password); 
foreach($dbh->query('SELECT UNIX_TIMESTAMP("2016-01-01 12:00:00")') as $row) { 
    echo "<tr>"; 
    echo "<td>" . $row['UNIX_TIMESTAMP("2016-01-01 12:00:00")'] . "</td>"; 
    echo "</tr>"; 
} 
?> 
+0

Nó được lưu trữ bằng varchar và không phải datetime.Tôi nghĩ rằng thats lý do tại sao tôi nhận được một 0 thay vì những gì nó nên đầu ra –

+0

Bạn có thể nhập một varchar để chức năng này: SELECT UNIX_TIMESTAMP ($ activeWorkRow ['WorkDate']) –

+0

$ timestamp = strtotime ($ mysqltime); ngày lặp lại ("Y-m-d H: i: s", $ dấu thời gian); –

2

Vấn đề của bạn là str_replace('/', '-', $locateDate);. Ngày của bạn được đưa ra là m/d/y và với thay thế đó, bạn sẽ chuyển đổi số đó thành m-d-y.

Nhưng strtotime xử lý - làm chỉ báo cho định dạng Châu Âu d-m-y. Và ở định dạng đó, 9/24/2015 không phải là ngày hợp lệ, dẫn đến kết quả được quan sát của bạn (tương đương với date('m-d-Y', 0)).

Đơn giản chỉ cần bỏ qua str_replace:

$activeWorkRow['WorkDate'] = "9/24/2015 1:45:53 PM"; 
$locateDate = $activeWorkRow['WorkDate']; 
echo strtotime($locateDate); 

Output:

1443116753 

Cf. the manual để biết thêm chi tiết và cẩn thận:

Ngày trong m/d/định dạng y hoặc dmy được disambiguated bằng cách nhìn vào tách giữa các thành phần khác nhau: nếu tách là một dấu gạch chéo (/), sau đó các Mỹ m/d/y được giả định; trong khi nếu dấu tách là dấu gạch ngang (-) hoặc dấu chấm (.), thì định dạng d-m-y Châu Âu được giả định. Tuy nhiên, nếu năm nay được đưa ra trong một định dạng hai chữ số và tách là một dấu gạch ngang (-, chuỗi ngày được phân tách như ymd

Lưu ý rằng khi hiển thị những timestamps bạn cũng có thể muốn suy nghĩ về. múi giờ (strtotime sử dụng giá trị mặc định trừ khi được chỉ định khác), nhưng miễn là bạn chỉ so sánh dấu thời gian được tạo bởi cùng một chức năng, bạn nên sử dụng cùng một chức năng mà bạn nên sử dụng.

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