PHP函数的高级用法strtotime()

从给定日期查找星期的第二天可能涉及一些复杂的循环和if语句。在PHP中,通过使用该strtotime()函数可以非常轻松地进行操作。该函数自版本4起成为PHP核心的一部分,几乎可以采用任何时间字符串表示形式并将其转换为Unix时间戳。

最常见的用法strtotime()是将字符串转换为时间。这是一些随机示例,前两个转换日期,后两个打印或多或少相同,但是(显然)会随时间而变化。我说或多或少是因为“ now”参数将返回当前时间戳,而“ today”参数将返回从当天开始算起的时间戳。

echo strtotime("19 September 2009"); // 印刷1253228400

echo strtotime("09/19/2009 12:00"); // 印刷1253358000

echo strtotime("today"); // 印刷1253314800

echo strtotime("now"); // 印刷品1253389683

如您所见strtotime(),在可以接受的参数方面,它非常健壮。如果您尝试向无法解析的函数发送时间,则它将返回false。显然,如果传递类似“ cat”之类的函数,它将返回false,但是有可能通过传递非美国格式的日期来破坏它而没有意识到。

该strtotime()函数希望您发送的值使用月/日/年而不是日/月/年的en_US时间格式进行格式化,因此,如果您尝试使用该格式的上述示例,该函数将返回false。

strtotime("18/09/2009 12:00") // returns false

从表面date()上看,这似乎不是问题,但是如果您将此值传递到函数中以打印出日期,则会发现正在打印1/01/1970的日期。如果日期看起来是有效的,此效果也可能导致问题。日期10/01/2009和01/10/2009之间有很多差异,但strtotime()始终将它们分别解释为2009年1月10日和2009年10月1日,因为它将始终基于mm / dd / yyyy。解决此问题的一种方法是将日期传递为yyyy / mm / dd或ISO日期格式。在这种情况下,2009/10/01将使函数返回2009年10月1日。

要记住的另一件事是,如果要输入1969年之前的日期,则需要输入4位数字的日期。根据有关此功能的文档,如果输入两位数的日期,则它将00-69设置为2000-2069,将70-99设置为1970-1999。

也可以使用strtotime()函数对日期进行简单的数学运算。要计算给定日期的下一个日期,只需在日期字符串的末尾添加“ +1天”。也可以使用多个时间段,也可以使用单数。

echo date('r', strtotime('19 September 2009 12:00 +1 day'));

这将打印出字符串“ Sun,2009年9月20日12:00:00 +0100”。日期字符串实际上是可选的,如果要计算从今天开始的第二天,则只需输入以下任意一项即可:

echo date('r', strtotime('now +1 day')); // 版画,2009年9月20日,星期日23:15:29 +0100

echo date('r', strtotime('today +1 day')); // 2009年9月20日,星期日打印00:00:00 +0100

echo date('r', strtotime('+1 day')); // 版画,2009年9月20日,星期日23:15:29 +0100

与上面的函数具有相同的输出(只要您在同一日期运行它)。这将与其他值和时间段一起使用。这里有一些实际的例子。

echo date('r', strtotime('19 September 2009 12:00 +23 seconds')); // 印刷品,2009年9月19日,星期六12:00:23 +0100

echo date('r', strtotime('19 September 2009 12:00 +28 minutes')); // 印刷品,2009年9月19日,星期六12:28:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +1 hour')); // 印刷品,2009年9月19日,星期六13:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +5 day')); // 版画2009年9月24日,星期四12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +2 weeks')); // 印刷品,2009年10月3日,星期六12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +1 month')); // 版画2009年10月19日星期一12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +3 year')); // 版画2012年9月19日星期三12:00:00 +0100

该函数还接受值“ fortnights”,该时间单位等于14天或两周。

echo date('r', strtotime('19 September 2009 12:00 +2 fortnights')); // Prints Sat, 17 Oct 2009 12:00:00 +0100

也可以减去日期和时间。

echo date('r', strtotime('19 September 2009 12:00 -3 hours')); // 印刷品,2009年9月19日,星期六09:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 -4 days')); // 版画,星期二,2009年9月15日12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 -3 years')); // 打印周二,2006年9月19日12:00:00 +0100

该strtotime()函数可以同时使用要使用的任何组合的多个值。

echo date('r', strtotime('19 September 2009 12:00 +1 day +2 weeks')); // 版画2009年10月4日,星期日12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 -18 days -8 months -38 years -12 hours')); // 印刷品,1971年1月1日,星期五00:00:00 +0100

下面的示例块包含三个示例,前两个将使strtotime()函数达到理论最大值,而第三个将破坏该函数。这是因为它超出了Unix时间戳的范围。1901年12月13日20:45:54之前或2038年1月19日19:03:14之后的任何日期都可能导致函数返回false。这些数字表示32位有符号整数的最大和最小可能值。我说64位系统可能会朝任一方向发展2920亿年,因此,如果您使用的是63位,则在这种情况下无需担心。

echo date('r', strtotime('19 September 2009 12:00 +28 years +1 months')); // 印刷品,1971年1月1日,星期五00:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 -107 years -9 months -5 days')); // 2037年10月19日星期一打印12:00:00 +0100

echo date('r', strtotime('19 September 2009 12:00 +3456 years')); // 1970年1月1日星期四01:00:00 +0100打印

该strtotime()功能的最后一项功能是使用“下一个”和“最后一个”参数。使用这些参数,您可以使用所需的任何参数简单地从日期中添加或减去1。还可以将下一天和最后一天与一周中的几天相结合,以确定一周的第二天或最后一天是什么日期。这是实际使用的下一个和最后一个参数的一些示例。

echo date('r', strtotime('last month')); // 版画,2009年8月19日星期三22:29:19 +0100

echo date('r', strtotime('next week')); // 版画,2009年9月26日,星期六22:29:19 +0100

echo date('r', strtotime('last Friday')); // 2009年9月18日星期五打印00:00:00 +0100

echo date('r', strtotime('next Friday')); // 2009年9月25日星期五打印00:00:00 +0100

您还可以传入带有这些参数的日期,以确定该日期之后的日期。

echo date('r', strtotime('19 September 2009 12:00 last month')); // 版画,2009年8月19日星期三22:29:19 +0100

为了加快速度,我创建了一个函数,该函数可让您获取一周中下一个选定日期的日期。此函数采用三个参数。

  • $day-这是必填参数,仅是星期几。该功能将强制您输入为三个字母的速记(例如,星期五的星期五),但是可以轻松更改。

  • $date-这是第二个可选参数,它将使函数计算出从该日期开始的第二天的日期。如果未提供此参数,则使用当前日期。

  • $format-这是一个可选参数,允许您在运行时设置日期的返回格式。设置为yyyy / mm / dd。

这是功能。

function nextDayDate($day, $date = null, $format = "Y/m/d") 

{

    // Normalise day

    $day = ucfirst(strtolower($day));

 

    // Make sure day exists

    $days = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

    if (!in_array($day, $days)) {

        return false;

    }

 

    // Convert date (if present)

    if ($date) {

        if (!is_int($date)) {

            $date = strtotime($date);

        }

    } else {

        $date = time();

    }

 

    // Work out date

    if (date("D", $date) == $day) {

        //today is friday

        $currentdate = date($format, $date);

    } else {

        $currentdate = date($format, strtotime("next " . $day . " " . date('Y/m/d', $date)));

    }

 

    return $currentdate;

}

以下是此功能的一些使用实例。请注意,当您传递无效的一周中的某天时,该函数将返回false。

echo nextDayDate("Mon"); // Prints 2009/09/21

echo nextDayDate("Wed"); // Prints 2009/09/23

echo nextDayDate("Inv"); // Prints nothing

echo nextDayDate("Fri", time()); // Prints 2009/09/25

echo nextDayDate("Mon", '2009/09/18'); // Prints 2009/09/21

echo nextDayDate("Fri", '12/12/2000'); // Prints 2000/12/15

echo nextDayDate("Sat", '02/06/92'); // Prints 1992/02/08

echo nextDayDate("Sat", '', 'D'); // Prints Sat

echo nextDayDate("Sat", null, 'd/m/Y'); // Prints 19/09/2009

echo nextDayDate("Sat", '123456', 'r'); // Prints Sat, 19 Sep 2009 12:34:56 +0100

最后,使用时要记住两件事strtotime()。首先,如果您不确定时间格式,那么最好是引入一个分析日期字符串并将其重新格式化的处理步骤,或者只是手动确定日期。

第二点要警惕的是,此函数的先前版本有错误。如果计算某个月的工作日恰好在某月的第一天,那么在计算某个月的工作日时,会在计算中增加一周,或者在使用下一个参数时,会出现+2而不是+1的错误。较新版本的PHP会使事情变得更好,但是如果您要依靠绝对第二完美的值进行计算,我认为最好是以秒为单位找出该值并将其添加到时间戳中,而不是让strtotime()事情来处理。

以上是 PHP函数的高级用法strtotime() 的全部内容, 来源链接: utcz.com/z/311511.html

回到顶部