【问题标题】:International Fixed Calendar /Cotsworth Calendar国际固定日历/科茨沃斯日历
【发布时间】:2020-03-27 16:57:22
【问题描述】:

我正在尝试建立一个网站,其日历从公历转换为 IFC。转换很简单,但我对 PHP 的了解不够,无法进行所有计算以显示今天的日期。

我已经设法从工作变量 $dayofyear 打印当前月份,该变量计算自 1 月 1 日以来的天数(手动输入),然后通过以下方式显示当前月份:

    $now = time(); // or your date as well
    $your_date = strtotime("2020-01-01"); //I'd also love to get this replaced with a string automatically starting from jan 1st of current year so I don't have to update it every year.
    $dayofyear = $now - $your_date;
    $day = round($dayofyear / (60 * 60 * 24));
    $date = round($dayofyear / (7));

    if ($day > 0 && $day < 27) {
        echo 'January';
    }
    elseif ($day > 28 && $day < 55) {
        echo 'February';
    }
    elseif ($day > 56 && $day < 83) {
        echo 'March';
    }
    elseif ($day > 84 && $day < 111) {
        echo 'April';
    }
    elseif ($day > 112 && $day < 139) {
    echo 'May';
    }
    elseif ($day > 140 && $day < 168) {
        echo 'June';
    }
    elseif ($day > 169 && $day < 196) {
        echo 'Sol';
    }
    elseif ($day > 197 && $day < 224) {
        echo 'July';
    }
    elseif ($day > 225 && $day < 252) {
        echo 'August';
    }
    elseif ($day > 253 && $day < 280) {
        echo 'September';
    }
    elseif ($day > 281 && $day < 308) {
        echo 'October';
    }
    elseif ($day > 309 && $day < 336) {
        echo 'November';
    }
    elseif ($day > 337 && $day < 365) {
        echo 'December';
    }

    else {
        echo '<i>error...</i>';
    }

此外,我们将非常感谢您提供替代方案以缩短代码。 我一直在尝试通过 javascript 来实现这一点,但没有成功......

【问题讨论】:

  • 为什么不直接使用 date() 函数呢? php.net/manual/en/function.date.php
  • 哦,谢谢!现在我可以删除整个变量定义来计数!如何将其转换为新日期仍然是我面临的问题
  • 我感觉自己拿着钻头并试图通过转动整个钻头来钻孔,而不是按下按钮让钻头完成工作????
  • 不用等待,它不会是每天一行,因为同一个日期显然发生在十三个不同的日期('z')上,所以我想这是可行的
  • 这就是我现在的位置。出现了问题,因为页面显示的是 4 月 1 日,而应该是 4 月 3 日... Dreamweaver 没有给出任何错误,但是当它出现时,它主要意味着缺少或不正确的字符,而它预期会有其他东西... @987654322 @

标签: php date calendar


【解决方案1】:

如前所述,您想查看 date、strtotime 和 php DateTime 接口。我不清楚您要做什么,但您不应该构建大型 if/then 语句来处理日期。

https://www.php.net/manual/en/function.date.php

https://www.php.net/manual/en/function.strtotime.php

https://www.php.net/manual/en/class.datetime

// Current Month
echo date('F') . '<br/>';

// Print January 1st of the current year
echo date('Y-01-01') . '<br/>';

// Current day of year
echo date('z') . '<br/>';

// strtotime is nice to parse any date format
$time = strtotime('now +60 days');
echo date('r', $time) . '<br/>';

// Get date from any day of year, note this starts from 0
$dayOfYear = 255;
$date = DateTime::createFromFormat( 'z' , $dayOfYear);
// Month
echo $date->format('F') . '<br/>';
// Day of the month
echo $date->format('d') . '<br/>';

March
2020-01-01
86
Tue, 26 May 2020 23:22:09 +0000
September
13

【讨论】:

  • 我正在为国际固定日历构建一个日历站点,其中的日期与我们过去 500 年来一直使用的公历不同。 IFC 有 13 个月,每个月 28 天,这就是为什么我必须计算日期而不是仅使用 date() 函数。我打算在页面上显示今天的 IFC 日期,但由于 IFC 有 13 个月和 28 天,所以今天的 IFC 日期是 4 月 4 日,而公历日期是 3 月 28 日。pastebin.com/Jv2UNQ7i
  • 具有最新更改的最新 pastebin。这将是我创建用户后的最后一个链接,因此我可以编辑粘贴,而不是在每次修改代码时创建新粘贴。 pastebin.com/tVmWMDC8
  • 我这辈子都想不通为什么 if, elseif value == x or x or x... 和 else-parameters 不起作用,所以它以三行结束一年中每一天的代码......它并不漂亮,该文档由 1196 行代码组成,但它可以工作。
【解决方案2】:

好的,现在我明白了这个问题。我认为您可以使用模运算符并将一年中的公历除以 28 以获得 IFC 的月份和日期。然后将其转换为正确的月份名称。

ifcDate(0);

$time = strtotime('1/29/2020');
ifcDate(date('z', $time));

ifcDate(363);

// Today 
ifcDate(date('z'));

// Other dates
$time = strtotime('2/26/2020');
ifcDate(date('z', $time));

$time = strtotime('06/25/2020');
ifcDate(date('z', $time));

function ifcDate($day) {
  // gregorian day starts at 0
  $ifcMonth = ceil(($day + 1) / 28);
  $ifcDay = ($day % 28) + 1;

  // Month 7 is Sol
  if ($ifcMonth < 7) {
    $dateObj = DateTime::createFromFormat('!m', $ifcMonth);  
    $month = $dateObj->format('F'); 
  } elseif ($ifcMonth == 7) {
    $month = 'Sol';
  } else {
    $dateObj = DateTime::createFromFormat('!m', $ifcMonth - 1);  
    $month = $dateObj->format('F'); 
  }    

  echo "$ifcMonth $ifcDay" . "<br />";
  echo "$month $ifcDay" . "<br />";

}

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多