有没有办法在strtotime中设置默认日期(“YYYY-mm”)

时间:2013-01-10 12:58:44

标签: php time

以下片段在我的项目中:

/*
//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"

在此post中,它表示默认日期是一个月中的第一天。但我发现输出 2011-10-10 !!我将片段移动到一个干净的PHP脚本,它正常输出2011-10-01。

我认为关于strtotime设置默认日是一些选择吗?我今天也发现第10个是否重要?

更新:我知道只需添加完整的日期格式,例如“$ y- $ m-01”就可以解决问题,但我想知道它为什么会发生?

更新:这太奇怪了。我只写日期(“Y-m-d”,strtotime(“2013-1”))并返回“2013-01-10”

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

3 个答案:

答案 0 :(得分:0)

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

$ts = 1319990400;
var_dump(date("Y-m-01", $ts));
//string(10) "2011-10-01"

答案 1 :(得分:0)

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

<?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)

答案 2 :(得分:0)

我知道发生了什么事。

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

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

顺便说一句,clean脚本使用PHP 5.2.17。