在使用php时,如何在另一个给定日期之后找到某个日期?
如何在另一个日期之后找到下一个固定日期 例如: 我需要知道四月一日是什么时候 如果我的日期是2013-02-28,我需要返回2013-04-01 如果我的日期是2013-05-01,我需要返回2014-04-01 有没有快速的方法可以做到这一点 更新 相对日期格式在PHP5.3.3中无法正常工作 这就是我要做的:在使用php时,如何在另一个给定日期之后找到某个日期?,php,date,Php,Date,如何在另一个日期之后找到下一个固定日期 例如: 我需要知道四月一日是什么时候 如果我的日期是2013-02-28,我需要返回2013-04-01 如果我的日期是2013-05-01,我需要返回2014-04-01 有没有快速的方法可以做到这一点 更新 相对日期格式在PHP5.3.3中无法正常工作 这就是我要做的: function aprilFoolsDay($datein,$format){ $date = new DateTime($datein); $year = $d
function aprilFoolsDay($datein,$format){
$date = new DateTime($datein);
$year = $date->format("Y");
$april = new DateTime($year.'-04-01');
if($date > $april){
$april = new DateTime(($year + 1).'-04-01');
}
return $april->format($format);
}
echo aprilFoolsDay('2011-05-28','Y-m-d');
我不认为支持“明年四月”(这个例子当然不起作用),但你可以这样做:
$date = new DateTime("2013-05-01");
$target_date = new DateTime("April 1");
$date->modify(
$target_date->format("m/d").
(($date->format('m')>$target_date->format('m'))?"+1 year":'')
);
echo $date->format("Y-m-d"); // output: 2014-04-01
我不认为支持“明年四月”(这个例子当然不起作用),但你可以这样做:
$date = new DateTime("2013-05-01");
$target_date = new DateTime("April 1");
$date->modify(
$target_date->format("m/d").
(($date->format('m')>$target_date->format('m'))?"+1 year":'')
);
echo $date->format("Y-m-d"); // output: 2014-04-01
你可以用它来做。注意:此功能可识别时区
此函数的每个参数都使用默认时区,除非
时区在该参数中指定。小心不要使用
每个参数中都有不同的时区,除非另有规定。看见
date\u default\u timezone\u get()介绍定义默认值的各种方法
时区
$dtstr='2013-03-28';
$dtmonth=日期(“m”,标准时间($dtstr));
$dtyear=日期(“Y”,标准时间($dtstr));
$dtyear=$dtmonth您可以使用。注意:此功能可识别时区
此函数的每个参数都使用默认时区,除非
时区在该参数中指定。小心不要使用
每个参数中都有不同的时区,除非另有规定。看见
date\u default\u timezone\u get()介绍定义默认值的各种方法
时区
$dtstr='2013-03-28';
$dtmonth=日期(“m”,标准时间($dtstr));
$dtyear=日期(“Y”,标准时间($dtstr));
$dtyear=$dtmonth您可以使用相对时间格式来获取所需日期:
$date1 = new DateTime('2013-02-28');
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
$date1 = new DateTime('2014-05-01');
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
这是一个可重用的函数:
echo getNextAprilFirst('2013-02-28');
echo getNextAprilFirst('2014-05-01');
function getNextAprilFirst($date) {
$date1 = new DateTime($date);
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
return $date2->format('Y-m-d');
}
您可以使用相对时间格式获取您要查找的日期:
$date1 = new DateTime('2013-02-28');
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
$date1 = new DateTime('2014-05-01');
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
echo $date2->format('Y-m-d');
这是一个可重用的函数:
echo getNextAprilFirst('2013-02-28');
echo getNextAprilFirst('2014-05-01');
function getNextAprilFirst($date) {
$date1 = new DateTime($date);
$date2 = clone $date1;
$date2->modify('First day of April');
if ($date2 < $date1) {
$date2->modify('+1 year');
}
return $date2->format('Y-m-d');
}
这不起作用。第二个例子在时间上倒退。OP想要下一个发生,为什么要克隆一个现有的对象&修改而不是一个开始日期正确的新对象?因为我们不知道该日期是哪一年。如果我们只使用“四月一日”
今年我们将永远得到。。。但是,如果你只是比较月份而不是日期作为一个整体,这是没有必要的。看起来根本不起作用,PHP5.3中是否提供了相对时间格式?这不起作用。第二个例子在时间上倒退。OP想要下一个发生,为什么要克隆一个现有的对象&修改而不是一个开始日期正确的新对象?因为我们不知道该日期是哪一年。如果我们只使用“四月一日”
今年我们将永远得到。。。但是,如果您只是比较月份而不是日期作为一个整体似乎根本不起作用,那么就没有必要了,PHP5.3中是否提供了相对时间格式?
<?php
/**
* @param $date string of date
* @return unix time of april fools
*/
function getNextAprilFoolsOfYear($date) {
// unix time for date
$unixdate = strtotime($date);
$year = date('Y', $unixdate);
$currentyearfools = strtotime($year . '-04-01');
// check if current date is past this year april fools or not
if ($unixdate < $currentyearfools) {
// if not pass yet
return $currentyearfools;
} else {
return strtotime(($year + 1) . '-04-01');
}
}
echo date('Y-m-d', getAprilFoolsOfYear('2014-01-01'));
echo '<br />';
echo date('Y-m-d', getNextAprilFoolsOfYear('2014-05-01'));
2014-04-01
2015-04-01