2016-08-29 20 views
5

Veritabanına kaydedilen tarih için doğru unix zaman damgasını eklerken sorun yaşıyorum.strtotime ve tarih doğru çıkmıyor

$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>"; 

Çıktı:

9-24-2015 1:45:53 PM 

Sonraki:

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

Çıktı: Ben bu yüzden başkalarıyla karşılaştırabilirsiniz unix zaman damgası almak için çalışıyorum

12-31-1969 

. MySQL kullanıyorsanız

+0

ne zaman dilimi? –

+0

Orta saat diliminde –

cevap

0

şunları söyleyebilirsiniz:

mysql> UNIX_TIMESTAMP SEÇ();

<?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>"; 
} 
?> 

veya belirli bir tarih deneme için Unix Damgası zamana ihtiyacın varsa:

mysql> UNIX_TIMESTAMP SEÇ ('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

daki sunucusudur Bu varchar kullanılarak depolanır ve oluyor datetime değil.Bu yüzden –

+0

çıktısı yerine 0 aldığımı düşünüyorum. Bu fonksiyona bir varchar girebilirsiniz: SELECT UNIX_TIMESTAMP ($ activeWorkRow ['WorkDate']) –

+0

$ timestamp = strtotime ($ mysqltime); echo tarih ("Y-m-d H: i: s", $ timestamp); –

2

Sorununuz, str_replace('/', '-', $locateDate);. Tarihiniz m/d/y olarak verilir ve bu değiştirmeyle m-d-y olarak dönüştürülür.

Ancak strtotime, - Avrupa d-m-y biçiminin göstergesi olarak davranır. Ve bu biçimde, 9/24/2015 geçerli bir tarih değil, gözlenen çıktınıza yol açar (date('m-d-Y', 0)'a eşittir).

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

Çıktı:

1443116753 

Cf

Basitçe str_replace atlamak Daha fazla bilgi ve uyarılar için the manual: daha sonra, ayırıcı bir çizgi (/) ise: m

Tarih/D/y ya da GAY biçimleri çeşitli bileşenler arasındaki ayırıcı bakarak belirgin hale edilir Amerikan m/d/y varsayılmaktadır; ayırıcı bir tire (-) veya nokta (.) ise, o zaman Avrupa d-m-y formatı kabul edilir. Ancak yıl iki haneli formatı ve verilmemiş ise ayırıcı bir çizgi (- olduğunda tarih dizesi YAG'DIR olarak ayrıştırılır bu damgaları görüntülendiği zaman da düşünmek isteyebilirsiniz

Not söyledi. saat dilimleri (strtotime aksi belirtilmedikçe varsayılan kullanır), ancak yalnızca aynı işlevi tarafından oluşturulan damgalarını karşılaştırarak konum sürece ince olmalıdır.

İlgili konular