如何格式化BC日期(如“-700-01-01”)?

时间:2014-09-15 10:38:05

标签: javascript date momentjs

如何使用Moment.js格式化ISO日期BC?

moment("-700-01-01").year();     // 700 (WRONG)
moment("-0700-01-01").year();    // 700 (WRONG)
moment("-000700-01-01").year();  // -700 (RIGHT)

出于某种原因,一年有6位数的符号有效。这是"对"办法?为什么"-700-01-01"之类的符号不起作用?

2 个答案:

答案 0 :(得分:3)

这不是Moment.js特有的问题;如果您尝试使用您正在使用的字符串初始化Date()对象,也会发生同样的情况。如果您首先将其创建为Date()对象并使用setYear()手动分配年份,则会接受-700的日期:

var date = new Date();

date.setYear(-700);

moment(date).year();
> -700

然而,正如Niels Keurentjes has pointed out所述,日期计算这一点远远变得非常复杂,并且可能完全不可靠。

如果您需要“-700-01-01”,可以分别配置年,月和日:

date.setYear(-700);
date.setMonth(0);
date.setDate(1);

console.log(date);
> Fri Jan 01 -700 11:53:57 GMT+0000 (GMT Standard Time)

至于700BC的第一个月的第一天是否实际上是一个星期五...你必须自己看一下。

答案 1 :(得分:0)

在您的示例中,减号也用作年,月和日之间的分隔符。正如你在詹姆斯答案的评论中指出的那样,使用昏迷作为分隔符有助于区分。