Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储超过4位年份的日期_Javascript_Php_Python_Date_Datetime - Fatal编程技术网

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库没有。”-请告诉我们或向我们展示您迄今为止尝试过的内容以及结果。