Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用m-d-Y格式的PHP strotime_Php_Date_Strtotime - Fatal编程技术网

使用m-d-Y格式的PHP strotime

使用m-d-Y格式的PHP strotime,php,date,strtotime,Php,Date,Strtotime,我的日期格式为(m-d-Y)月-日-年。我想减去日期。我不能使用strotime(),因为它在那种格式下无法工作。如何使用m-d-Y格式减去日期 <?php date_default_timezone_set('America/Chicago'); $olddate = "11-04-2013"; $today = date("m-d-Y"); $days = $olddate - $today; echo $days; ?> 如果我使用stro

我的日期格式为(m-d-Y)月-日-年。我想减去日期。我不能使用strotime(),因为它在那种格式下无法工作。如何使用m-d-Y格式减去日期

<?php
  date_default_timezone_set('America/Chicago');

  $olddate = "11-04-2013"; 
  $today = date("m-d-Y");

  $days = $olddate - $today;

  echo $days;

?> 


如果我使用strotime,我的结果(截至2013年5月11日)为“30”。但我不能只除以30。如果我将olddate更改为“10-04-2013”,那么结果也是“30”。

您可以使用DateTime::createFromFormat获取时间戳,然后获取差异

您应该使用php的类(php 5.3+用于
createFromFormat
):


DateTime类,或者您使用
str\u replace()
-with/它应该可以与
strotime()
配合使用。这是常见的美国日期格式顺序,但分隔符不是。

您可以使用该类:

$oldDate = \DateTime::createFromFormat('m-d-Y', "11-04-2013");
$today = new \DateTime('today');

$difference = $today->diff($oldDate);
echo $difference->format('%a');

如果要比较两个日期之间的差异: 通过将字符串转换为日期格式

new DateTime("11-04-2013") or new DateTime(date("m-d-Y"))

$diffe = new DateTime("11-04-2013")->diff(new DateTime(date("m-d-Y")));
echo $diffe->format('%R%a days');    

我想你可以研究一下:

示例#1 DateTime::diff()示例

面向对象风格 从:

通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式的日期歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式

只需替换字符。您可以通过如下程序方式获取日期后的天数:

$date = '11-04-2013';
$time = strtotime(str_replace('-','/',$date));
$now = strtotime(date('Y-m-d'));
$diff = $now - $time;
$days = $diff / (24 * 60 * 60);
echo $days;

如果回显$diff,则会出现一个错误,即无法将DateInterval转换为字符串。如何回显结果?@bagofmilk查看
格式的手册:,查看我的编辑我看到你编辑了你的答案。这是一个很好的开始,但不幸的是,如果将旧日期更改为2013年4月10日,这将不起作用。结果仍然是1天。@bagofmilk这是真的,因为月份也增加了。如果您想要总天数,则需要
a
而不是
d
,我将进行编辑。不幸的是,我一直使用月-日-年的格式,否则我将使用strottime()。如果将“-”改为“/”,或者发生爆炸(“-”,$date),该怎么办?
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');
?>
<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
?>
+2 days
$date = '11-04-2013';
$time = strtotime(str_replace('-','/',$date));
$now = strtotime(date('Y-m-d'));
$diff = $now - $time;
$days = $diff / (24 * 60 * 60);
echo $days;