使用strtotime和日期格式化日期字符串

时间:2014-06-07 06:47:58

标签: php date strtotime

我有日期字符串(示例'2014-06-06 12:24:48')。我用其他格式显示什么(例'06.06.2014 (12:24:48)')。

$date = '2014-06-06 12:24:48';
echo date('d-m-Y (H:i:s)', strtotime($date));

输出日期是否始终与输入日期相同?对于任何有效的输入日期。

date('Y-m-d H:i:s') === date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))); 
// Always true?

3 个答案:

答案 0 :(得分:4)

date('Y-m-d H:i:s') === date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))); 
// Always true?

虽然大多数时候该陈述都是正确的,但并不总是是真的,因为左(date('Y-m-d H:i:s')是在右date('Y-m-d H:i:s')之后评估的,所以如果代码在第二个数字即将改变之前运行一个纳秒,两个日期将有不同的第二个数字。

您可以通过运行以下代码来验证这两个语句并不总是相同,最终将打印“False”。

while(true) {
  $x = (date('Y-m-d H:i:s') === date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))));
  if(!$x) {
    exit("False");
  }
}

但是,如果为每个date调用提供相同的时间戳,则语句将始终相等

$time = strtotime(date('Y-m-d H:i:s'));
date('Y-m-d H:i:s',$time) === date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s',$time))); 
//Always true

答案 1 :(得分:1)

是。这两个日期将始终是相同的日期和时间 - 采用不同的格式:

2014-06-06 12:24:48
06-06-2014 (12:24:48)

See demo

修改

声明:

date('Y-m-d H:i:s') === date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s')));

总是通常为真(编辑2 )。

date()上的第二个参数默认为当前时间戳。

strtotime(date('Y-m-d H:i:s'))是当前的时间戳。

所以这两个陈述:

date('Y-m-d H:i:s')

date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))

在逻辑上是一样的。

Another demo

修改2

FuzzyTree's answer指出,虽然这两种说法通常都是正确的,但它们并不总是正确的。有关详细信息,请参阅他的回答

答案 2 :(得分:0)

是的,您可以更改日期格式,如

$date = '2014-06-06 12:24:48';
echo date('d-m-Y (H:i:s)', strtotime($date));

更多格式: - http://www.php.net//manual/en/function.date.php

输出与输入日期不一致,它取决于您输入的日期格式 所以如果你的日期格式是: -

$date = date('Y-m-d H:i:s');

,输入日期格式为

$input_date = date('Y/m/d H:i:s');

然后你需要转换输入日期格式以匹配其他日期,如

$input_date = date('Y-m-d H:i:s', strtotime($inputdate));

否则您的输入日期格式相同,则无需转换

然后匹配if($date == $input_date)