2010-08-12 5 views
1

J'utilise strtotime pour convertir une date en timbre unixtime. L'année, la date et le jour sont des valeurs différentes à coder et j'utilise le code ci-dessous pour produire l'horodatage.pourquoi strotime renvoie une valeur négative en php?

$year = '1961'; 
$month = '2'; 
$day = '15'; 

$date = $year."-".$month."-".$day; 

echo strtotime($date); 

Le code ci-dessus imprime: -27648000 pour moi. Si l'année est au-dessus de 1970, elle imprime des résultats positifs. J'apprends toujours avec l'horodatage, si quelqu'un peut m'aider. L'objectif principal est de convertir une date en timestamp unix. Les questions sont pourquoi il donne des résultats négatifs, je le code mal !? Je suis aussi essayé mktime, mais toujours le même résultat.

Merci, Tanmay

+0

@Tout le monde: Merci pour les réponses rapides. Cela m'aiderait vraiment à mieux comprendre les horodatages. Merci. – jtanmay

+0

@Everyone: cela m'a un peu plus curieux, donc y at-il un moyen d'obtenir l'horodatage avant 1901, j'ai essayé avec strtotime, mais ça me revient 0 toujours. Y a-t-il un moyen d'obtenir l'horodatage pour les dates précédentes? – jtanmay

Répondre

5

Cela a à voir avec l'époque Unix.

Voir: date() et time()

La plage valide d'un horodatage est généralement de Ven, 13 décembre 1901 20:45:54 GMT mar, 19 janvier 2038 03:14:07 GMT. (Ce sont les dates qui correspondent aux valeurs minimum et maximum pour un entier signé de 32 bits). Cependant, avant PHP 5.1.0, cette plage était limitée du 01-01-1970 au 19-01-2038 sur certains systèmes

+0

Merci pour votre explication et des liens vers le manuel de php. Cela a vraiment aidé à bien comprendre l'horodatage. @ Tout le monde, Merci pour votre temps et de soutien avec ma vie d'apprentissage. – jtanmay

+0

cela m'a un peu plus curieux, donc y at-il un moyen d'obtenir l'horodatage avant 1901, j'ai essayé avec strtotime, mais ça me renvoie 0 toujours. Y a-t-il un moyen d'obtenir l'horodatage pour les dates précédentes? – jtanmay

+0

Les horodatages UNIX sont limités à des entiers de 32 bits sur des machines 32 bits, de sorte que votre plage effective est de 1901 à 2038 environ. Utilisez http://php.net/datetime à la place si vous avez besoin d'une plus grande portée ou passez à une plate-forme 64 bits. (http://bugs.php.net/bug.php?id=50913) –

1

temps Unix commence à l'époque Unix qui est minuit le 1er janvier 1970. Ainsi, toute date antérieure qui aboutiront à une valeur négative retournée.

0

Ceci est un horodatage Unix. La date de base Unix/PHP est le 1er janvier 1970 à 00:00 UST et l'horodatage est mesuré en secondes. Si négatif, c'est le nombre de secondes avant la date de base; si positif, le nombre de secondes après

4

C'est le comportement attendu.

strtotime renvoie un horodatage UNIX, le nombre de secondes écoulées depuis le 1er janvier 1970 (sans compter les secondes intercalaires). Pour les dates antérieures, cela renverra un nombre négatif.

0

Je continue à apprendre avec l'horodatage,

google unix timestamp ->http://en.wikipedia.org/wiki/Unix_time

défini comme le nombre de secondes écoulées depuis minuit proleptic temps universel coordonné (UTC) de 1er janvier 1970

0

http://en.wikipedia.org/wiki/Unix_time

temps Unix, ou le temps de POSIX, est un système pour décrire les points dans le temps, défini comme le nombre de secondes écoulées depuis proleptic minuit temps universel coordonné (UTC) du 1er Janvier 1970, sans compter les secondes de saut. Il est largement utilisé, non seulement dans les systèmes d'exploitation de type Unix, mais également dans de nombreux autres systèmes informatiques et formats de fichiers. Il ne s'agit pas d'une représentation linéaire du temps ni d'une représentation fidèle de l'UTC (bien qu'il soit souvent confondu avec les deux), car les temps qu'il représente sont UTC mais ne représentent pas les secondes intercalaires standard UTC (par exemple: 31 décembre 1998 23:59:60) ...

Les temps avant le 1/1/1970 sont des valeurs négatives car elles se sont produites avant le début de l'UTC.

Questions connexes