我正在尝试在PHP中执行一些基本的日期和时间戳操作,并且已经获得了意想不到的结果。我正在尝试获取现有时间戳$startDate
的月份,月份和日期(即上午12点的日期时间戳)的时间戳。不过,它也在改变日期,如下面的代码所示。
$startDateString = date("Y-M-j", $startDate);
$startDateTimestamp = strtotime($startDateString);
echo "$startDate == $startDateTimestamp ?<br>";
echo date("Y-M-j", $startDate)." == ".date("Y-M-j", $startDateTimestamp)." ?<br>";
这给了我以下输出:
1299299589 == 1298952000 ?
2011-Mar-4 == 2011-Feb-28 ?
虽然我不希望时间戳相同(因为$startDate
不一定是在上午12点),但我看不出日历日期是如何不同的。我做错了什么?
答案 0 :(得分:2)
来自strtotime文档:
日期/时间字符串。有效格式在Date and Time Formats。
中说明
至于您要解决的问题,您可以将其他内容传递给strtotime,例如relative formats。
strtotime('midnight', $startDate);
作为一个例子,当前时间回显午夜(你今天也可以使用,如果午夜令人困惑):
echo date('Y-m-d H:i:s', strtotime('midnight'));
'今天'和'午夜'
时间设置为00:00:00
当然,我是DateTime对象的忠实粉丝。
$date = new DateTime($startDate);
$date->modify('midnight');
echo $date->format('Y-m-d H:i:s');
答案 1 :(得分:1)
我通常使用“Y-m-d”格式进行类似的任务,并且有效:
$startDateString = date("Y-m-d", $startDate);
$startDateTimestamp = strtotime($startDateString);
echo "$startDate == $startDateTimestamp ?<br>";
echo date("Y-m-d", $startDate)." == ".date("Y-m-d", $startDateTimestamp)." ?<br>";
答案 2 :(得分:1)
经过一些简短测试后,我发现strtotime()
无法正确解析格式Y-M-j
。要解决此问题,请使用标准格式,例如RFC822 date time format,ISO-8601 date time format或使用j-M-Y
。