Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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
Php 在两个奇数日期选择中立即查找()_Php_Mysql_Mysqli - Fatal编程技术网

Php 在两个奇数日期选择中立即查找()

Php 在两个奇数日期选择中立即查找(),php,mysql,mysqli,Php,Mysql,Mysqli,我过去使用过numorous date函数,但我需要一个特定函数的帮助 是否有一个功能,我可以分配两个未知日期,系统知道我在这两个日期内的位置?让我解释一下: 我们的月薪从每月23号到下个月22号。因为工资是按小时计算的,我的老板想知道一个月内累计工资的多少。例如,工资期从2012年9月23日开始,现在是29日,我希望我的查询能够知道我们在当前工资期的位置 正如你们所知道的,几个月过去了,所以我的脚本必须自动知道我们现在处于哪个时期,在哪个时期 我可以围绕此进行查询,我只需要知道用于分配此数组的

我过去使用过numorous date函数,但我需要一个特定函数的帮助

是否有一个功能,我可以分配两个未知日期,系统知道我在这两个日期内的位置?让我解释一下:

我们的月薪从每月23号到下个月22号。因为工资是按小时计算的,我的老板想知道一个月内累计工资的多少。例如,工资期从2012年9月23日开始,现在是29日,我希望我的查询能够知道我们在当前工资期的位置

正如你们所知道的,几个月过去了,所以我的脚本必须自动知道我们现在处于哪个时期,在哪个时期

我可以围绕此进行查询,我只需要知道用于分配此数组的日期函数


任何帮助都将不胜感激-Thanx

您只需使用一个时间戳值(自历元起的秒数,也称为“unix时间戳”),然后测试unix时间戳中的当前日期是否在第一个和最后一个unix时间戳日期之间

从本质上讲,这样只需将日期转换为一个大整数(自1969/70年以来的秒数),算术和测试函数就变得容易处理了。

您可以使用PHP的类轻松地完成这项工作:-

$periodStart = new DateTime('23rd September');
$now = new DateTime();
$interval = $now->diff($periodStart);
echo "We are {$interval->d} days into the payment period";
输出:

我们的付款期已经过了6天

我更喜欢为这类事情扩展DateTime类,因此所有内容都在同一个位置:-

class MyDateTime extends DateTime
{
    public function elapsedDays(DateTime $since = null)
    {
        if ($since === null) {
            $since = new DateTime();
        }
        $interval = $since->diff($this);
        return (int) $interval->d;
    }
}

$periodStart = new MyDateTime('23rd September');
echo "We are {$periodStart->elapsedDays()} days into the payment period";
给出相同的输出

然后,您可以创建句点和间隔,并对其进行迭代以聚合总和,如下所示:

$datePeriodStart = new DateTime('23rd September');
$datePeriodEnd   = clone $datePeriodStart;
$datePeriodEnd->add(new DateInterval('P1M'));

$dateToday = new DateTime();
$interval1 = $dateToday->diff($datePeriodStart);
$interval2 = $dateToday->diff($datePeriodEnd);

echo "We are {$interval1->d} day(s) into the payment period, {$interval2->d} day(s) left.\n";

$period = new DatePeriod($datePeriodStart, new DateInterval('P1D'), $dateToday);
$days = new IteratorIterator($period);

$totalSalary = 0;
$totalDays = 0;
foreach($days as $day)
{
    $salary = get_salary_for_day($day);

    $totalSalary += $salary;
    $totalDays++;

    printf("#%d: %s %s\n", $totalDays, $day->format('Y-m-d'), number_format($salary));
}

printf("Total Salary for %d day(s): %s\n", $totalDays, number_format($totalSalary));
示例输出:

We are 6 day(s) into the payment period, 23 day(s) left.
#1: 2012-09-23 12,500
#2: 2012-09-24 12,500
#3: 2012-09-25 12,500
#4: 2012-09-26 12,500
#5: 2012-09-27 12,500
#6: 2012-09-28 12,500
#7: 2012-09-29 12,500
Total Salary for 7 day(s): 87,500
获取起始日期和截止日期:

$to = new DateTime();
$from = new DateTime($to->format('Y-m-23'));
if ($to->format('j') < 23) {
    $from->modify('-1 month');
}
SQL


比如datediff?选择datediff(curdate(),薪资pd开始日期)…Yo,etherbunny。你从堪萨斯来?为2600做了一些东西吗?看看
DateTime
DatePeriod
DateInterval
类。接下来,请通读这些类的程序员的书。你所说的“我们在哪里”是什么意思?在中的天数?@ethrbunny-datediff中的小时数听起来像是我需要的,但是看看下面的片段。。。选择DATEDIFF(CURDATE(),'2012-09-23'),但我如何实现自动化,以便在进入新月份时自动更改'2012-09-23'。尝试过了,但我仍然必须每个月指定开始日期。我的查询实际上计算了大约100名员工的所有工资,每个人都有自己的小时工资,它还计算指定期间、加班和周日的总工作小时数,并显示每个月的累计工资。其中,ea.
员工出勤日期
介于“$start\u date”和“CURDATE()”之间。。。此时,我的老板必须从日期选择器中选择开始日期,但我希望它自动执行。@JJMorgan:那又怎样?您可以在PHP中创建该日期,并将其传递到查询中。这也将使您不仅可以暂时使用该查询,还可以让它在过去运行一天。
var_dump($from->format('Y-m-d')); # 2012-09-23
var_dump($to->format('Y-m-d')); # 2012-09-29
$sql = "
    SELECT ...
    FROM ...
    WHERE some_time BETWEEN '" . $from->format('Y-m-d') . "' AND '" . $to->format('Y-m-d') ."'
";