Php 如何从一年中的某一天转到日期,反之亦然

问题描述 投票:0回答:9

如何在 php 中从一年中的第 n 天到这样的日期:

getdatefromday(275, 2012) 

它输出一个日期(如果是一个对象就更好了)。

我也想做相反的事情,比如

getdayoftheyear("21 oct 2012")

php date
9个回答
26
投票

这一切都很简单。您应该阅读

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;
}

7
投票

尝试(日期从

0
开始,而不是
1
):

$date = DateTime::createFromFormat( 'Y z' , '2012 275');
var_dump($date);

还有:

echo date('z', strtotime('21 oct 2012'));

3
投票
$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);

一年中的哪一天


1
投票

我知道它有点旧,答案已经被接受,但我想在这里提出一种替代方法,尝试使用问题所有者所需的确切格式:

// 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 日,依此类推。


0
投票

您可以使用 strtotime() 获取年份值的秒数(https://www.php.net/manual/en/function.strtotime.php)。比以秒为单位的天数(天 * 24 * 60 * 60)。现在您可以将此值与 date() 一起使用(请参阅第一个答案)


0
投票
function DayToTimestamp($day, $year = null)
{
    isset($year) or $year = date('Y');
    return strtotime("1 Jan $year +$day day");
}

0
投票
function getDateFromDayOfYear($dayOfYear,$year){
    return date('Y-m-d', strtotime('January 1st '.$year.' +'.$dayOfYear.' days'));
}

0
投票

从数字日到日期,在这种情况下,我使用 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);

在特定年份的第一天和最后一天的示例中。


-2
投票

获取一年中的某一天很容易。只需使用具有正确参数的日期函数,如手册中所述(闰年的 1 月 1 日返回 0,12 月 31 日返回 365)。

走另一条路需要一点创造力。

© www.soinside.com 2019 - 2024. All rights reserved.