0

以下片段在我的项目中:

/*
//forget it 
$ts = 1319990400;
$y = date("Y",$ts);
$m = date("m", $ts);

var_dump(date("Y-m-d", strtotime("$y-$m")));
*/
date("Y-m-d", strtotime("2013-1"));

它返回

"2013-01-10"

在这篇文章中,它说默认日期是一个月中的第一天。但我发现它输出2011-10-10!我将代码片段移动到一个干净的 PHP 脚本,它正常输出 2011-10-01。

我认为设置默认日期是关于 strtotime 的一些选项?我也发现今天是10号有关系吗?

更新:我知道只添加像“$y-$m-01”这样的完整日期格式可以解决问题,但我想知道为什么会这样?

更新:太奇怪了。我只写 date("Ymd", strtotime("2013-1")) 它返回 "2013-01-10"

更新:更新我的答案。:)

4

3 回答 3

0

如果你想要第一个,你可以这样做:

$ts = 1319990400;
var_dump(date("Y-m-01", $ts));
//string(10) "2011-10-01"
于 2013-01-10T13:03:24.757 回答
0

此外,您可以在 PHP >= 5.2中使用DateTime

<?php
$ts = 1319990400;
$dateTime = new DateTime;
$dateTime->setDate(date('Y', $ts), date('n', $ts), 1);
var_dump($dateTime->format('Y-m-d')); // string(10) "2011-10-01"
var_dump($dateTime->getTimestamp()); // int(1317474597)
于 2013-01-10T13:10:42.073 回答
0

我知道会发生什么伙计们。

int strtotime ( string $time [, int $now = time() ] )

我的项目使用 PHP 5.2.4,在这个版本中,strtotime 会将 $now 的日期设置为默认日期。我将 $now 设置为许多不同的值来确认这一点。但我在 strtotime() 更改日志中找不到任何有关此的信息。

顺便说一句,干净的脚本使用 PHP 5.2.17。

于 2013-01-10T14:46:59.863 回答