File: examine_diff.inc

package info (click to toggle)
php8.4 8.4.16-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 211,276 kB
  • sloc: ansic: 1,176,142; php: 35,419; sh: 11,964; cpp: 7,208; pascal: 4,951; javascript: 3,091; asm: 2,817; yacc: 2,411; makefile: 696; xml: 446; python: 301; awk: 148
file content (78 lines) | stat: -rw-r--r-- 2,930 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php

/**
 * Helper for the DateTime diff/days/math tests
 *
 * @author Daniel Convissor <danielc@analysisandsolutions.com>
 */

/**#@+
 * Which test segments should be displayed?
 */
define('PHPT_DATETIME_SHOW_DIFF', 1);
define('PHPT_DATETIME_SHOW_DAYS', 2);
define('PHPT_DATETIME_SHOW_ADD', 3);
define('PHPT_DATETIME_SHOW_SUB', 4);
/**#@-*/

/**
 * Provides a consistent interface for executing date diff/add/sub tests
 *
 * @param string|DateTime $end_date  the end date in YYYY-MM-DD format
 *                        (can include time HH:MM:SS) or a DateTime object
 * @param string|DateTime $start_date  the start date in YYYY-MM-DD format
 *                        (can include time HH:MM:SS) or a DateTime object
 * @param string $expect_spec  the expected result of the tests, in the
 *               special interval specification used for this test suite.
 *               This spec includes a "+" or "-" after the "P" in order to
 *               indicate which direction to go.
 * @param int $expect_days  the number of days to compare with the
 *            interval's "days" property
 * @param bool $absolute  should the result always be a positive number?
 *
 * @return void
 */
function examine_diff($end_date, $start_date, $expect_spec, $expect_days, $absolute = false) {
    if (is_string($start_date)) {
        $start = new DateTime($start_date);
    } else {
        $start = $start_date;
    }
    $start_date = $start->format('Y-m-d H:i:s T');

    if (is_string($end_date)) {
        $end = new DateTime($end_date);
    } else {
        $end = $end_date;
    }
    $end_date = $end->format('Y-m-d H:i:s T');

    $expect_interval = new DateInterval('P' . substr($expect_spec, 2));
    if (substr($expect_spec, 1, 1) == '-') {
        $expect_interval->invert = true;
    }

    if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_DIFF) {
        $result_interval = $start->diff($end, $absolute);
        $result_spec = $result_interval->format('P%R%yY%mM%dDT%hH%iM%sS');
        echo "DIFF: $end_date - $start_date = **$result_spec**\n";
        // echo "DIFF: $end_date - $start_date = **$expect_spec**\n";
    }
    if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_DAYS) {
        $result_interval = $start->diff($end, $absolute);
        $result_days = $result_interval->format('%a');
        echo "DAYS: **$result_days**\n";
        // echo "DAYS: **$expect_days**\n";
    }
    if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_ADD) {
        $start->add($expect_interval);
        $result_end_date = $start->format('Y-m-d H:i:s T');
        echo "ADD: $start_date + $expect_spec = **$result_end_date**\n";
    }
    if (PHPT_DATETIME_SHOW == PHPT_DATETIME_SHOW_SUB) {
        $end->sub($expect_interval);
        $result_start_date = $end->format('Y-m-d H:i:s T');
        echo "SUB: $end_date - $expect_spec = **$result_start_date**\n";
        // echo "SUB: $end_date - $expect_spec = **$start_date**\n";
    }
}