如何在PHP中使用变量计算日期
有人能帮忙创造这种逻辑吗?有点难以解释 如果要选择日期,请添加3天,然后根据数据库值选择下一个日期 假设我们从以下内容开始:如何在PHP中使用变量计算日期,php,Php,有人能帮忙创造这种逻辑吗?有点难以解释 如果要选择日期,请添加3天,然后根据数据库值选择下一个日期 假设我们从以下内容开始: $end_date = "2017-08-23 23:59:59" $payday = 5; //1=monday, 2=tuesday, 3=wednesday, 4=thursday, 5=friday //And we want to calculate $paydate: $temp_date = $end_date + 3 days; $pay_date = t
$end_date = "2017-08-23 23:59:59"
$payday = 5; //1=monday, 2=tuesday, 3=wednesday, 4=thursday, 5=friday
//And we want to calculate $paydate:
$temp_date = $end_date + 3 days;
$pay_date = the first $payday(day of week) after $temp_date
你知道如何用php写这个吗?这件事难倒我了。谢谢 要添加三天,您可以执行以下操作:
$date = new DateTime('2017-08-23 23:59:59');
$date->add(new DateInterval('P3D'));
$date->modify("next friday");
echo $date->format('Y-m-d') . "\n";
您还可以使用一个查找表或数组,将数字和一周中指定的天数相匹配,并使用类似于$date->modify(“下一个$days[$payday]”的内容代码>
在哪里
Jeff,看看哪个扩展了PHP的DateTime对象
它允许你以一种非常干净和直观的方式处理日期。根据您的示例:
$date = Carbon::parse('next monday')->toDateString();
根据您的具体情况调整。这个怎么样?它将获取一个日期,添加3天,然后循环接下来的几天,直到在$days
数组中找到一天(您可以从数据库中获取):
实现目标的另一个版本:
function nextPayday($dateString, $paydayNum) {
$paydays = [
1=>'monday',
2=>'tuesday',
3=>'wednesday',
4=>'thursday',
5=>'friday'
];
$temp_date_stamp = date('d-m-Y H:i:s', strtotime($dateString.' +3 days'));
$pay_date_stamp = strtotime('first '.$paydays[$paydayNum].' '.$temp_date_stamp);
return date('d-m-Y H:i:s', $pay_date_stamp);
}
$end_date = "2017-08-23 23:59:59";
$payday = 5;
echo nextPayday($end_date, $payday);
结果:
01-09-2017 23:59:59
这应该会让你大吃一惊:谢谢。在添加3天之后,我将尝试选择该日期并查找与“pay_day”设置相对应的下一个日历日。例如,$pay_day=5//1=周一。。。5=friSo我正在尝试采用新日期(在添加3天之后),并从该日期或新的日期中找到第一个星期五。消费发薪日将是每周,您可以使用$date->modify('nextFriday')
您可以使用查找表确定第二天需要使用Brilliant,谢谢。这正是我需要的(第二部分)。
function nextPayday($date) {
$date->add(new DateInterval('P3D'));
echo "Date + 3 days: ".$date->format('D Y-m-d') . "<br>";
$payDate = $date->add(new DateInterval('P1D'));
$day = "5";
while ($payDate->format("N") !== $day) {
$payDate->add(new DateInterval('P1D'));
}
return $payDate->format("D Y-m-d");
}
function nextPayday($dateString, $paydayNum) {
$paydays = [
1=>'monday',
2=>'tuesday',
3=>'wednesday',
4=>'thursday',
5=>'friday'
];
$temp_date_stamp = date('d-m-Y H:i:s', strtotime($dateString.' +3 days'));
$pay_date_stamp = strtotime('first '.$paydays[$paydayNum].' '.$temp_date_stamp);
return date('d-m-Y H:i:s', $pay_date_stamp);
}
$end_date = "2017-08-23 23:59:59";
$payday = 5;
echo nextPayday($end_date, $payday);
01-09-2017 23:59:59