PHP:为什么将日期字符串转换为时间戳然后再转换回日期字符串不起作用?

标签 php date time timestamp

我的代码

$time = "Tuesday, 26 June 2012";
//str_replace(',','',$time);<--this also doesn't work.
$a = strptime($time, "%l, %j %F %Y");
$stmp = mktime(0,0,0,$a['tm_mon'],$a['tm_mday'],$a['tm_year'],0);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp; //Tuesday, 30 November 1999 00:00:00

现在我知道有一种更优雅的方法,它确实有效:

$time = "Tuesday, 26 June 2012";
$stmp = strtotime($time);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;//Tuesday, 26 June 2012 00:00:00

但是第一个版本有什么问题呢?我只是好奇。

最佳答案

问题#1

$a = strptime(time, "%l, %j %F %Y");

你写了时间;它应该是 $time

问题#2

您的格式字符串有误。 strptime 没有使用与date 相同的格式字符串,只是在前面加了百分号;它有自己的一套。您的格式字符串应如下所示:

$a = strptime($time, "%A, %e %B %Y");

问题#3

  • strptime 返回自 1900 年以来的年数。您需要添加 1900
  • strptime 返回从 0 到 11 的月份。您需要添加 1

全部总结

这是你的代码,已修复:

<?php
$time = "Tuesday, 26 June 2012";
$a = strptime($time, "%A, %e %B %Y");

$stmp = mktime(0, 0, 0, $a['tm_mon'] + 1, $a['tm_mday'], 1900 + $a['tm_year']);
$from_stmp = date("l, j F Y H:i:s", $stmp);
echo $from_stmp;
?>

Hooray, it works!

关于PHP:为什么将日期字符串转换为时间戳然后再转换回日期字符串不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180797/

相关文章:

c++ - 在应用程序中实现到期日期?

php - fatal error : Call to undefined function sqlsrv_connect() in C:\xampp\htdocs

php - 没有where子句的mysql动态查询

linux - 得到没有。为某个日期范围打印的行数

python - 使用 Scrapy 在 Python 中选择部分文本字段

java - 日期格式 SQL

java - Java 计时器领域的现状如何?

c++ - 为什么内联汇编程序在此代码中有时更快而有时更慢?每次运行的执行时间变化很大

php - mysql_fetch_array() 返回 'supplied argument is not a valid MySQL result resource'

PHP - 如何保持命令 shell 打开以执行多个命令?