Javascript 存储超过4位年份的日期
我需要一种方法来序列化和取消序列化可能远离过去的日期,例如Javascript 存储超过4位年份的日期,javascript,php,python,date,datetime,Javascript,Php,Python,Date,Datetime,我需要一种方法来序列化和取消序列化可能远离过去的日期,例如-10000 我首先看了ISO8601,但它似乎不支持超过四位数的年份。(或者至少,我试过的python库没有。) 我能想到的不同解决方案有: 更改序列化/反序列化之前的年份,将其交给解析/格式化库,然后修复它(听起来有点骇人听闻) 定义我自己的格式,比如年:月:日:小时:分钟:秒(这是重新发明轮子,因为我必须处理时区等) 使用UNIX时间戳(不带边界)或类似的东西(在某些编程语言中可能会溢出,但仍然是时区) 存储日期在-9999(或0
-10000
我首先看了ISO8601,但它似乎不支持超过四位数的年份。(或者至少,我试过的python库没有。)
我能想到的不同解决方案有:
- 更改序列化/反序列化之前的年份,将其交给解析/格式化库,然后修复它(听起来有点骇人听闻)
- 定义我自己的格式,比如
(这是重新发明轮子,因为我必须处理时区等)年:月:日:小时:分钟:秒
- 使用UNIX时间戳(不带边界)或类似的东西(在某些编程语言中可能会溢出,但仍然是时区)
- 存储日期在
(或-9999
)之前与之后不同,因为当时没有时区问题/闰年/问题。(同一位置有两种不同的格式)0
这在任何方面都不是一种符合标准的方式,但它可能会为您带来好处您可以从天文学界人士那里获得一页。他们通过建立年代来解释地球自转的长周期进动。(如果你现在看与公元前10000年相比,天空是不同的。)
创建一个新类,该类具有当前日期类的“历元”编号和外观模式。新类包含两个专用字段,分别是历元和内部日期。构造函数将epoch设置为(year div 10000),并用(year modulo 10000)实例化内部日期。我希望facade模式的其余部分和我想的一样明显。
ISO 8601
确实支持超过4位的日期,如果并且仅当这些日期是有签名的。据我所知,唯一支持此功能的PHP
函数是
DateTime::setISODate($Year, $WeekOffset, $DayofWeekOffset)
显然,使用它很痛苦,因为它需要计算完美的日/月对的偏移量。这就是说,您应该能够通过在年份上用“-”(减号)签名来创建BC日期
然后,您可以使用
DateTime::format("c")
在生产中,这看起来像:
$date= new DateTime();
$date->setISODate(-100000,$WeekOffset, $DoWOs);
echo $date->format("c");
关于DBA的这个问题可能很有用:“我尝试过的python库没有。”-请告诉我们或向我们展示您迄今为止尝试过的内容以及结果。