根据MDN
"日期对象基于时间值,即自UTC时间1970年1月1日以来的毫秒数."
那为什么它接受负面价值呢?
即使它确实不应该在1970年1月1日之前的负值平均值?
new Date('0000', '00', '-1'); // "1899-12-30T05:00:00.000Z"
new Date('0000', '00', '00'); // "1899-12-31T05:00:00.000Z"
new Date('-9999', '99', '99'); // "-009991-07-08T04:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
怎么了 ?
更新
对于某些正值,年份从1900年开始
new Date(100); // "1970-01-01T00:00:00.100Z" // it says 100Z
new Date(0100); // "1970-01-01T00:00:00.064Z" // it says 64Z
new Date("0006","06","06"); // "1906-07-06T04:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
另请注意,在最后一个中,日期显示为4,这是错误的.
我怀疑这是某种Y2K错误?!!
She*_*epy 15
这很难且不一致,是的.JavaScript Date对象基于 Java 1.0中的一个,这非常糟糕,以至于Java 重新设计了一个全新的包.JavaScript不是那么幸运.
1st Jan 1970
是此基线的实际时间.since
是时间戳值的方向:向前为+ ve,向后为-ve.new Date() // Current datetime. Every tutorial should teach this.
Run Code Online (Sandbox Code Playgroud)
时间是绝对的,但"显示"时区可以是UTC或本地.
为简单起见,此答案仅使用UTC. 测试时请记住时区.
new Date(0) // 0ms from 1970-01-01T00:00:00Z.
new Date(100) // 100ms from 1970 baseline.
new Date(-10) // -10ms from 1970 baseline.
Run Code Online (Sandbox Code Playgroud)
new Date('000') // Short years are invalid, need at least four digits.
new Date('0000') // 0000-01-01. Valid because there are four digits.
new Date('1900') // 1900-01-01.
new Date('1900-01-01') // Same as above.
new Date('1900-01-01T00:00:00') // Same as above.
new Date('-000001') // 2 BC, see below. Yes you need all those zeros.
Run Code Online (Sandbox Code Playgroud)
new Date(0,0) // 1900-01-01T00:00:00Z.
new Date(0,0,1) // Same as above. Date is 1 based.
new Date(0,0,0) // 1 day before 1900 = 1899-12-31.
new Date(0,-1) // 1 month before 1900 = 1899-12-01.
new Date(0,-1,0) // 1 month and 1 day before 1900 = 1899-11-30.
new Date(0,-1,-1) // 1 month and *2* days before 1900 = 1899-11-29.
new Date('0','1') // 1900-02-01. Two+ params always cast to year and month.
new Date(100,0) // 0100-01-01. Year > 99 use year 0 not 1900.
new Date(1900,0) // 1900-01-01. Same as new Date(0,0). So intuitive!
Run Code Online (Sandbox Code Playgroud)
new Date(-1,0) // 1 year before 0000-01-01 = 1 year before 1 BC = 2 BC.
new Date(-1,0,-1) // 2 days before 2 BC. Fun, yes? I'll leave this as an exercise.
Run Code Online (Sandbox Code Playgroud)
没有0 AC.有1 AC和公元前1年的前一年. 按照惯例,0年是公元前1年.
2 BC显示为年份
"-000001"
.额外的零是必需的,因为它超出正常范围(0000到9999).如果你new Date(12345,0)
也会得到"+012345-01-01"
.当然,直到1923年在欧洲采用的格里高利历,在我们到达BC之前很久就不再有意义了.事实上,学者们认为耶稣并非出生于公元前1世纪.但随着恒星和地球以这种规模移动,日历是你最不担心的.
剩下的给定代码只是这些情况的变体.例如:
new Date(0100) // One number = epoch. 0100 (octal) = 64ms since 1970
new Date('0100') // One string = iso = 0100-01-01.
new Date(-9999, 99, 99) // 9999 years before BC 1 and then add 99 months and 98 days
Run Code Online (Sandbox Code Playgroud)
希望你有一些有趣的时间.请不要忘记投票.:)
为了保持理智,请将所有日期保留在ISO 8601中并使用字符串构造函数.
如果您需要处理时区,请将所有日期时间保留为UTC.
归档时间: |
|
查看次数: |
3531 次 |
最近记录: |