如何从字符串中获取完整日期而不在PHP中的字符串中包含实际月份?

时间:2017-08-16 19:02:26

标签: php datetime

有没有办法从实际上不包含月份的字符串中获取完整日期?

我以[{1}}的格式给出了日期,并且需要将其添加到我的数据库中一个月,

我正在制作的应用程序是针对生活方式的快递员,他们以这种格式获得清单,并且过去2个月可用,所以我需要找出月份?

4 个答案:

答案 0 :(得分:0)

假设您想要考虑当前和最近两个月,我可以想象,在该时间跨度内不会有同一工作日的两天数(应首先证明)。

我会使用PHP的日期函数迭代过去n天,然后尝试检测你的"星期三16日"其中n是与参数日期相关的月份天数的总和" t"返回当前和最近两个月。

如果你有你的比赛,你就知道月份和年份(如果你从1月或2月开始,那年也可能是上一年)。

答案 1 :(得分:-1)

Yesno。由于full date需要了解月份,因此您需要知道如何处理缺少该信息的情况。如果您“猜测”月份(无论是当前的月份还是随机的,无关紧要),那么“是”即将结束。如果您无法确定我们谈论的月份,那么答案为no(或random)。

PS:你可能也需要一个year ......

答案 2 :(得分:-1)

你可以这样做:

<?php
$date = 16;
$day = "Wednesday";

$oneMonthAgo = explode(" ",date("m Y F",strtotime("-1 month")));
$twoMonthsAgo = explode(" ",date("m Y F",strtotime("-2 months")));

if (date("l",strtotime($date."-".$oneMonthAgo[0]."-".$oneMonthAgo[1]))==$day) {
    echo "Last month: ".$oneMonthAgo[2];
}
else if (date("l",strtotime($date."-".$twoMonthsAgo[0]."-".$twoMonthsAgo[1]))==$day) {
    echo "Month before last: ".$twoMonthsAgo[2];
}
else {
    echo "Not valid";
}
?>

说明

因为您使用的是PHP,所以有一种简单的方法可以做到这一点。在其他语言中,您必须使用weekday algorithm

在PHP中,我们可以将格式正确的字符串转换为时间,然后我们可以从中导出日期信息。格式正确的字符串的示例是-1 month-2 months,它们分别返回前一个月或之前一个月的时间对象。

使用date()功能,我们可以获取这些月份的月,年和月份值。我们用空格分隔这些,以便我们可以在找到它们之后将这些值分解为数组。因此,我们现在有两个数组$oneMonthAgo$twoMonthsAgo,这两个数组都包含他们在012的月份和文本月份分别为$date个索引。

现在,我们可以创建另一个时间,方法是将我们要查找的日期(-)附加到这些值上,并在中间使用适当的分隔符(当使用d-m-Y作为分隔符时,当使用/ PHP假定m-d-Y格式时,PHP采用date()格式。然后,通过另一个$day函数传递,我们可以找到我们正在寻找的数据:在该日期发生的文本日。现在我们可以简单地将其与我们正在寻找的那天进行比较,if。如果文本日是相同的,那么这是我们正在寻找的月份,因此我们可以打印出完整的文本月份。

我们会在else / if (!String.IsNullOrEmpty(Request.Form["params"]))声明中对这两个月进行此操作,如果我们仍然无法找到它,则假设该日期无效。

备注

答案 3 :(得分:-1)

我使用while循环向后循环,然而需要很多个月来查找搜索内容。

$date = 16;
$day = "Wednesday";
$x=0;

$start = date("Y-m-") . $date;

While(date("l", strtotime($start ."-" .$x . "months")) != $day){
    $x++;
}
Echo $x . " months ago.";
// Or to output the date:
//Echo date("Y-m-d", strtotime($start ."-" .$x . "months"));

https://3v4l.org/vUYeX

这将在0个月前输出 但是如果输入$ date = 15;它将在5个月前(2017年3月)输出。