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/

相关文章:

PHP array_search 函数不能正常处理返回值

java - Java中按日期字段对对象列表进行排序

php - MySQL-PHP : Calculate total hours in a day between multiple events

python - 用第一个值减去 Pandas 数据框中的一列

r - 如何将时间段从字符更改为数字

php - CakePHP 约定名称或连接的名称

javascript - 通过将 id 从 javascript 发送到 php 页面来删除所选行

php - 从叶子遍历到表中的一个或多个父节点

android - 如何检查字符串是否是有效的 Joda DateTime

r - 将数据拆分或子集为 30 分钟间隔