2016-08-29 2 views
5

J'ai des problèmes pour renvoyer l'horodatage unix correct pour la date enregistrée dans la base de données.strtotime et la date ne sont pas sorties correctement

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

Sortie:

9-24-2015 1:45:53 PM 

suivant:

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

Sortie:

12-31-1969 

Je suis en train de se rendre à l'horodatage unix je peux le comparer avec les autres .

+0

Quel fuseau horaire est votre serveur? –

+0

fuseau horaire central –

Répondre

0

Si vous utilisez MySQL, vous pouvez dire:

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

ou si vous avez besoin Unix Time Stamp pour un essai de date spécifiée:

mysql> SELECT UNIX_TIMESTAMP ('01/01/2016 12: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

Il est stocké à l'aide varchar et pas datetime.Je pense que c'est pourquoi je reçois un 0 au lieu de ce qu'il devrait sortir –

+0

Vous pouvez entrer un varchar à cette fonction: SELECT UNIX_TIMESTAMP ($ activeWorkRow ['WorkDate']) –

+0

$ timestamp = strtotime ($ mysqltime); date d'écho ("Y-m-d H: i: s", horodatage $); –

2

Votre problème est le str_replace('/', '-', $locateDate);. Votre date est donnée comme m/d/y et avec ce remplacement vous le convertissez en m-d-y.

Mais strtotime traite - comme indicateur pour le format européen d-m-y. Et dans ce format, 9/24/2015 n'est pas une date valide, conduisant à votre sortie observée (qui est égale à date('m-d-Y', 0)).

sauter simplement le str_replace:

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

Sortie:

1443116753 

Cf. the manual pour plus d'informations et des mises en garde:

dates dans le m/j/formats y ou DMY sont désambiguïsé en regardant le séparateur entre les divers composants: si le séparateur est un slash (/), la M/d/y américain est supposé; tandis que si le séparateur est un tiret (-) ou un point (.), alors le format européen d-m-y est supposé. Toutefois, si l'année est donnée dans un format à deux chiffres et le séparateur est un tiret (-, la chaîne de date est analysée comme AMJ

Notez que lors de l'affichage de ces horodateurs vous pouvez également penser. timezones (strtotime utilise la valeur par défaut, sauf indication contraire), mais aussi longtemps que vous ne comparant horodatages générés par la même fonction, vous devriez être très bien.