0

我的日期格式为 (mdY) 月-日-年。我正在尝试减去日期。我不能使用 strtotime() 因为它不能以那种格式工作。如何减去 mdY 格式的日期?

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

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

  $days = $olddate - $today;

  echo $days;

?> 

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

4

7 回答 7

3

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

$olddate = DateTime::createFromFormat('m-d-Y', '11-04-2013');    // for example, see manual for formats
$today = new DateTime();

$diff = $today->diff($olddate);
$diff_string = $diff->format('%a days');
于 2013-11-05T22:34:44.413 回答
1

文档

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

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

$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;
于 2013-11-05T23:20:39.137 回答
1

如果你想比较两个日期之间的差异:convert string to dateformat by

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');    
于 2013-11-05T22:38:32.813 回答
1

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

http://www.php.net/manual/en/datetime.createfromformat.php

于 2013-11-05T22:34:23.967 回答
1

DateTime 类,或者您使用str_replace()- 与 / 它应该与strtotime(). 这是一个常见的美国日期格式顺序,但分隔符不是。

于 2013-11-05T22:36:40.737 回答
1

您可以为此使用DateTime该类:

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

$difference = $today->diff($oldDate);
echo $difference->format('%a');
于 2013-11-05T22:37:50.557 回答
0

我想你可以看看这个:http ://www.php.net/manual/en/datetime.diff.php

Example #1 DateTime::diff() 例子

面向对象风格

<?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
于 2013-11-05T22:43:19.513 回答