农历日历的PHP / MySQL

时间:2018-08-03 16:41:53

标签: php mysql

我正在使用Yii2,而MySQL确实制作了一个农历应用程序。 我在表中有2个字段:normal_date和lunar_date(类型为DATE)。这里发生问题: 对于普通日历,日期1950-04-16应该是农历中的1950-02-30日期。 PHP DateTime类或MySQL DATE类型都不接受。 我想问的是,我应该使用哪种类型来存储lunar_date数据,以及应该使用哪种PHP库来处理此类数据。

我的应用程序必须非常正常地在normal_date和lunar_date之间进行转换,并且我的数据库将非常庞大,因为我将存储从1950年到2050年的数据。

1 个答案:

答案 0 :(得分:2)

您不能使用公历日期存储中国农历,因为它们遵循不同的规则,正如您尝试存储1950-02-30所清楚显示的那样。同样,在MySQL和PHP中都可能发生的操作(如在日期中增加天数)将不兼容。

所以您主要有两个选择:

  • 将农历日期处理并存储为字符串,例如"1950-02-30"
  • 将农历日期作为整数的三倍进行处理和存储,例如MySQL中的SMALLINT和两个TINYINT以及PHP中具有3个数字属性的class(为了保持整洁,但会随处可见)也可以使用3个变量。)

让我提及,您可能会发现将日期转换为日历转换的最常见中间表示形式Julian Day Number很有用。在PHP中,您有gregoriantojdjdtogregorian,在MySQL中,您可以使用TO_DAYS(gregorian_date) + 1721060FROM_DAYS(julian_day_number - 1721060)。不幸的是,中文日历没有类似的东西(尽管在PHP中是希伯来日历的东西),因此您可以在这里欣赏精美的艺术品。