我正在用yii2和mysql做一个农历应用程序。表中有两个字段:正常日期和农历日期(日期类型)。问题就出现了:在正常的日历中,日期1950-04-16应该是农历的1950-02-30。php datetime类和mysql date类型都不接受这一点。我想问的是,我应该使用什么类型来存储农历日数据,以及我应该使用什么php库来处理此类数据。我的应用程序必须在正常日期和农历日期之间转换,而且我的数据库将非常大,因为我将存储1950年到2050年的数据。
toe950271#
您不能使用公历日期来存储中国的农历日期,因为它们遵循不同的规则,就像您尝试存储的那样 1950-02-30 清楚地显示。另外,在mysql和php中都可能的向日期添加天数之类的操作也不兼容。所以你主要有两个选择:将农历日期作为字符串进行处理和存储,如 "1950-02-30" ,或以整数的三倍形式处理和存储农历日期,如 SMALLINT 还有两个 TINYINT mysql中的s和 class 在php中有3个数字属性(为了保持整洁,但也可以传递3个变量)。让我提一下,您可能会发现将日期转换为日历转换最常见的中间表示形式很有用,即儒略日数。在php中 gregoriantojd 以及 jdtogregorian ,在mysql中可以使用 TO_DAYS(gregorian_date) + 1721060 以及 FROM_DAYS(julian_day_number - 1721060) . 不幸的是,在中国的日历中没有类似的东西(尽管在php中希伯来的日历是这样的),所以这就是你的艺术开始的地方。
1950-02-30
"1950-02-30"
SMALLINT
TINYINT
class
gregoriantojd
jdtogregorian
TO_DAYS(gregorian_date) + 1721060
FROM_DAYS(julian_day_number - 1721060)
1条答案
按热度按时间toe950271#
您不能使用公历日期来存储中国的农历日期,因为它们遵循不同的规则,就像您尝试存储的那样
1950-02-30
清楚地显示。另外,在mysql和php中都可能的向日期添加天数之类的操作也不兼容。所以你主要有两个选择:
将农历日期作为字符串进行处理和存储,如
"1950-02-30"
,或以整数的三倍形式处理和存储农历日期,如
SMALLINT
还有两个TINYINT
mysql中的s和class
在php中有3个数字属性(为了保持整洁,但也可以传递3个变量)。让我提一下,您可能会发现将日期转换为日历转换最常见的中间表示形式很有用,即儒略日数。在php中
gregoriantojd
以及jdtogregorian
,在mysql中可以使用TO_DAYS(gregorian_date) + 1721060
以及FROM_DAYS(julian_day_number - 1721060)
. 不幸的是,在中国的日历中没有类似的东西(尽管在php中希伯来的日历是这样的),所以这就是你的艺术开始的地方。