Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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 如果发现日期字符串介于两个日期之间,则返回“付款周期”开始(&U);支付期结束。怎么用?_Php_Datetime - Fatal编程技术网

Php 如果发现日期字符串介于两个日期之间,则返回“付款周期”开始(&U);支付期结束。怎么用?

Php 如果发现日期字符串介于两个日期之间,则返回“付款周期”开始(&U);支付期结束。怎么用?,php,datetime,Php,Datetime,如果我在每个硬编码数组中手动键入每个月的每一天,则以下代码有效 然后在数组中循环查找匹配项,如果找到匹配项,则返回该数组的第一个索引和最后一个索引值。这些是稍后将用于mysql select查询的付款期开始和结束日期 // MOUNTAIN DAYLIGHT SAVINGS TIME date_default_timezone_set('MST7MDT'); // = PHP Default TimeZone //print 'MOUNTAIN DAYLIGHT SAVINGS TIME';

如果我在每个硬编码数组中手动键入每个月的每一天,则以下代码有效

然后在数组中循环查找匹配项,如果找到匹配项,则返回该数组的第一个索引和最后一个索引值。这些是稍后将用于mysql select查询的付款期开始和结束日期

// MOUNTAIN DAYLIGHT SAVINGS TIME
date_default_timezone_set('MST7MDT');

// = PHP Default TimeZone
//print 'MOUNTAIN DAYLIGHT SAVINGS TIME';
//print '<p>';

// = MySQL CURRDATE() in MySQL DATETIME Format.
$php_current_date = date('Y-m-d');

// 2019 Pay Periods - MONTHLY

$parent_array = array(
1 => array('2019-01-01','2019-01-31'),
2 => array('2019-02-01','2019-02-28'),
3 => array('2019-03-01','2019-03-31'),
4 => array('2019-04-01','2019-04-30'),
5 => array('2019-05-01','2019-05-31'),
6 => array('2019-06-01','2019-06-30'),
7 => array('2019-07-01','2019-07-31'),
8 => array('2019-08-01','2019-08-31'),
9 => array('2019-09-01','2019-09-30'),
10 => array('2019-10-01','2019-10-31'),
11 => array('2019-11-01','2019-11-30'),
12 => array('2019-12-01','2019-12-31'),
13 => array('2020-01-01','2020-01-31'),
14 => array('2020-02-01','2020-02-29'),
15 => array('2020-03-01','2020-03-31'),
16 => array('2020-04-01','2020-04-30'),
17 => array('2020-05-01','2020-05-31'),
18 => array('2020-06-01','2020-06-30'),
19 => array('2020-07-01','2020-07-31'),
20 => array('2020-08-01','2020-08-31'),
21 => array('2020-09-01','2020-09-30'),
22 => array('2020-10-01','2020-10-31'),
23 => array('2020-11-01','2020-11-30'),
24 => array('2020-12-01','2020-12-31')
);


$current_pay_period_start = '';
$current_pay_period_end = '';


// For each child Array of date Strings inside parent Array of arrays...
foreach($parent_array as $child_array){

   // Speculate the variable name as $result_found while searching each child Array of date Strings
   // for the Current date in *Mountain Daylight Savings Time
   $result_found = in_array($php_current_date, $child_array);

    // if we have a match...
    if ($result_found) {

        // GET LEFT-MOST index and assign it to a variable.
        $current_pay_period_start = current($child_array);

        // GET RIGHT-MOST index and assign it to another variable.
        $current_pay_period_end = end($child_array);
        // Add a day for mysql query logic...
        // because mysql uses < instead of =< for comparison in the query the follows...
        $current_pay_period_end = date('Y-m-d', strtotime($current_pay_period_end . ' + 1 days'));

        /* 
        Following Works ONLY on direct access.
        Debug Only.
        Eg. localhost/folder/filename.php
        */


        print 'Php Current Date: ' . $php_current_date;
        print '<br>';
        print 'Current Pay Period Start: ' . $current_pay_period_start;
        print '<br>';
        print 'Current Pay Period End: ' . $current_pay_period_end;
        exit;

    }
}

我为您编写了以下内容,用于比较数组中的两个日期。希望这会有帮助

        $php_current_date = date('Y-m-d');
        $parent_array = array(
            1 => array('2019-01-01','2019-01-31'),
            2 => array('2019-02-01','2019-02-28'),
            3 => array('2019-03-01','2019-03-31'),
            4 => array('2019-04-01','2019-04-30'),
            5 => array('2019-05-01','2019-05-31'),
            6 => array('2019-06-01','2019-06-30'),
            7 => array('2019-07-01','2019-07-31'),
            8 => array('2019-08-01','2019-08-31'),
            9 => array('2019-09-01','2019-09-30'),
            10 => array('2019-10-01','2019-10-31'),
            11 => array('2019-11-01','2019-11-30'),
            12 => array('2019-12-01','2019-12-31'),
            13 => array('2020-01-01','2020-01-31'),
            14 => array('2020-02-01','2020-02-29'),
            15 => array('2020-03-01','2020-03-31'),
            16 => array('2020-04-01','2020-04-30'),
            17 => array('2020-05-01','2020-05-31'),
            18 => array('2020-06-01','2020-06-30'),
            19 => array('2020-07-01','2020-07-31'),
            20 => array('2020-08-01','2020-08-31'),
            21 => array('2020-09-01','2020-09-30'),
            22 => array('2020-10-01','2020-10-31'),
            23 => array('2020-11-01','2020-11-30'),
            24 => array('2020-12-01','2020-12-31')
        );
        foreach ($parent_array as $child_array) {
            //compare dates using strtotime, did the conversion in the if statement to retain the original date format, for output if results are found.
            if (strtotime($php_current_date) >= strtotime($child_array[0]) && strtotime($php_current_date) <= strtotime($child_array[1])) {
                // match found...
                $current_pay_period_start = $child_array[0];
                $current_pay_period_end = $child_array[1];
                print 'Php Current Date: ' . $php_current_date;
                print '<br>';
                print 'Current Pay Period Start: ' . $current_pay_period_start;
                print '<br>';
                print 'Current Pay Period End: ' . $current_pay_period_end;
                exit;
            }
        }

希望这会有帮助

因为mysql在查询中使用<而不是=<进行比较,下面的
是什么意思?Mysql支持
它迎合范围为
1=>array('2019-01-01','2019-01-31 23:59:59')的Select查询。
。这是错误的、过时的还是糟糕的方法?我愿意听取建议。现在,我正在考虑在每个数组的末尾创建一个子数组,并在其末尾加上'23:59:59'。我会尝试使用
strotime
strotime(“月的最后一天”)
这样的相对日期来解决这个问题。在查询中使用日期之前,你可以改变它的格式。老实说,我认为这取决于你的mysql字段是日期还是日期时间。我只想做一些边缘案例测试,但无论哪种方式,您都应该能够让它工作。这也会帮助你轻松地获得一个月的第一天和最后一天。好极了我将能够使用这个每周,每两周,每月,每季度,每年。
        $php_current_date = date('Y-m-d');
        $parent_array = array(
            1 => array('2019-01-01','2019-01-31'),
            2 => array('2019-02-01','2019-02-28'),
            3 => array('2019-03-01','2019-03-31'),
            4 => array('2019-04-01','2019-04-30'),
            5 => array('2019-05-01','2019-05-31'),
            6 => array('2019-06-01','2019-06-30'),
            7 => array('2019-07-01','2019-07-31'),
            8 => array('2019-08-01','2019-08-31'),
            9 => array('2019-09-01','2019-09-30'),
            10 => array('2019-10-01','2019-10-31'),
            11 => array('2019-11-01','2019-11-30'),
            12 => array('2019-12-01','2019-12-31'),
            13 => array('2020-01-01','2020-01-31'),
            14 => array('2020-02-01','2020-02-29'),
            15 => array('2020-03-01','2020-03-31'),
            16 => array('2020-04-01','2020-04-30'),
            17 => array('2020-05-01','2020-05-31'),
            18 => array('2020-06-01','2020-06-30'),
            19 => array('2020-07-01','2020-07-31'),
            20 => array('2020-08-01','2020-08-31'),
            21 => array('2020-09-01','2020-09-30'),
            22 => array('2020-10-01','2020-10-31'),
            23 => array('2020-11-01','2020-11-30'),
            24 => array('2020-12-01','2020-12-31')
        );
        foreach ($parent_array as $child_array) {
            //compare dates using strtotime, did the conversion in the if statement to retain the original date format, for output if results are found.
            if (strtotime($php_current_date) >= strtotime($child_array[0]) && strtotime($php_current_date) <= strtotime($child_array[1])) {
                // match found...
                $current_pay_period_start = $child_array[0];
                $current_pay_period_end = $child_array[1];
                print 'Php Current Date: ' . $php_current_date;
                print '<br>';
                print 'Current Pay Period Start: ' . $current_pay_period_start;
                print '<br>';
                print 'Current Pay Period End: ' . $current_pay_period_end;
                exit;
            }
        }
        $php_current_date = date('Y-m-d');
        $parent_array = array(
            1 => array('2019-01-01','2019-01-31'),
            2 => array('2019-02-01','2019-02-28'),
            3 => array('2019-03-01','2019-03-31'),
            4 => array('2019-04-01','2019-04-30'),
            5 => array('2019-05-01','2019-05-31'),
            6 => array('2019-06-01','2019-06-30'),
            7 => array('2019-07-01','2019-07-31'),
            8 => array('2019-08-01','2019-08-31'),
            9 => array('2019-09-01','2019-09-30'),
            10 => array('2019-10-01','2019-10-31'),
            11 => array('2019-11-01','2019-11-30'),
            12 => array('2019-12-01','2019-12-31'),
            13 => array('2020-01-01','2020-01-31'),
            14 => array('2020-02-01','2020-02-29'),
            15 => array('2020-03-01','2020-03-31'),
            16 => array('2020-04-01','2020-04-30'),
            17 => array('2020-05-01','2020-05-31'),
            18 => array('2020-06-01','2020-06-30'),
            19 => array('2020-07-01','2020-07-31'),
            20 => array('2020-08-01','2020-08-31'),
            21 => array('2020-09-01','2020-09-30'),
            22 => array('2020-10-01','2020-10-31'),
            23 => array('2020-11-01','2020-11-30'),
            24 => array('2020-12-01','2020-12-31')
        );
        foreach ($parent_array as $child_array) {
            //compare dates using strtotime, did the conversion in the if statement to retain the original date format, for output if results are found.
            if (strtotime($php_current_date) >= strtotime($child_array[0]) && strtotime($php_current_date) <= strtotime($child_array[1])) {
                // match found...
                $current_pay_period_start = $child_array[0];
                $current_pay_period_end = $child_array[1];
                print 'Php Current Date: ' . $php_current_date;
                print '<br>';
                print 'Current Pay Period Start: ' . $current_pay_period_start;
                print '<br>';
                print 'Current Pay Period End: ' . $current_pay_period_end;
                exit;
            }
        }
Php Current Date: 2019-03-07
Current Pay Period Start: 2019-03-01
Current Pay Period End: 2019-03-31