如何在 php 中从一年中的第 n 天到这样的日期:
getdatefromday(275, 2012)
它输出一个日期(如果是一个对象就更好了)。
我也想做相反的事情,比如
getdayoftheyear("21 oct 2012")
这一切都很简单。您应该阅读
DateTime
对象的 createFromFormat
静态方法 here、date
函数 here 和 strtotime
函数 here。
/**
* Converts the day of year of a year into a DateTime object
* @param int $year The year
* @param int $dayOfYear The day of year (value 1 till 365 or 1 till 366 for leap years)
* @return \DateTime The resulting date
*/
function getDateFromDay(int $year, int $dayOfYear): \DateTime {
// Note: "Y z" and "z Y" make a difference for leap years (last tested with PHP 8.0.3)
$date = \DateTime::createFromFormat('Y z', strval($year) . ' ' . strval($dayOfYear-1));
return $date;
}
尝试(日期从
0
开始,而不是 1
):
$date = DateTime::createFromFormat( 'Y z' , '2012 275');
var_dump($date);
还有:
echo date('z', strtotime('21 oct 2012'));
$todayid = date("z"); // to get today's day of year
function dayofyear2date($tDay, $tFormat = 'd-m-Y'): string {
$day = intval($tDay);
$day = $day === 0 ? $day : $day - 1;
$offset = intval(intval($tDay) * 86400);
$str = date($tFormat, strtotime('Jan 1, ' . date('Y')) + $offset);
return $str;
}
echo dayofyear2date($todayid);
一年中的哪一天
我知道它有点旧,答案已经被接受,但我想在这里提出一种替代方法,尝试使用问题所有者所需的确切格式:
// This gets the day of the year number
// given a formatted date string like
// "21 oct 2012"
function getdayoftheyear($dateString) {
date('z', strtotime($dateString));
}
相反:
// This gets the date formatted in $dateFormat way
// like "Y-m-d"
// given the $dayOfTheYear and the $year in numeric form
function getdatefromday($dateFormat, $dayOfTheYear, $year) {
date($dateFormat, mktime(0, 0, 0, 1, ($dayOfTheYear + 1), $year));
}
第二个函数使用 mktime() 的功能,允许设置参数列表中的任何数字,因为它可以管理溢出并自行查找正确的月份。 因此,如果您调用 mktime(0, 0, 0, 1, 32, 2015),它实际上知道 1 月的 32 日是 2dn 月的 1 日,依此类推。
您可以使用 strtotime() 获取年份值的秒数(https://www.php.net/manual/en/function.strtotime.php)。比以秒为单位的天数(天 * 24 * 60 * 60)。现在您可以将此值与 date() 一起使用(请参阅第一个答案)
function DayToTimestamp($day, $year = null)
{
isset($year) or $year = date('Y');
return strtotime("1 Jan $year +$day day");
}
function getDateFromDayOfYear($dayOfYear,$year){
return date('Y-m-d', strtotime('January 1st '.$year.' +'.$dayOfYear.' days'));
}
从数字日到日期,在这种情况下,我使用 for 来获取特定格式“20-01-01”的所有天数,如果您不希望这样,请不要使用该格式。
for($i = 0; $i < 365; $i++){
$date = date_create_from_format( 'Y z' , '2020 '.$i);
print_r($date->format('y-m-d'));
print_r("\n");
}
从日期到具体日期的数字的其他情况如下:
$date=date('z', strtotime('2023-01-01') + 1);
print_r($date);
$date=date('z', strtotime('2023-12-31') + 1);
print_r($date);
在特定年份的第一天和最后一天的示例中。
获取一年中的某一天很容易。只需使用具有正确参数的日期函数,如手册中所述(闰年的 1 月 1 日返回 0,12 月 31 日返回 365)。
走另一条路需要一点创造力。