使用javascript将iso8601日期时间字符串映射到Julian Day

时间:2013-12-18 19:28:16

标签: javascript date timestamp iso8601 julian-date

是否有人拥有以下格式的ISO-8601日期时间字符串的紧凑/优雅地图:

2013-12-28T20:30:00-0700

到朱利安日。我希望找到一个避免使用外部库并且具有最小的正则表达式和字符串操作的解决方案。

1 个答案:

答案 0 :(得分:2)

这是一种方法。

您可以将ISO字符串(时区偏移量)转换为现代JavaScript(ES5)中的JavaScript Date对象。这适用于Node.js,Chrome和Firefox。 Safari或IE尚不支持它。如果您需要它在所有浏览器中工作,您必须自己解析日期或使用像Moment.js这样的库。

我针对一系列日期针对US Naval Observatory Julian Date Converter测试了此算法。

对于格列高利变换之前的日期(1582年10月15日),这假设是公历的格里高利历,并且与美国海军天文台所显示的不同。

function julianDayNumber(d) {
  var epoch = 2440587.500000;                   // Jan. 1, 1970 00:00:00 UTC
  return d.getTime() / 86400000 + epoch;
}

样本用法:

console.log(julianDayNumber(new Date('2013-12-28T20:30:00-0700')));
// prints: 2456655.6458333335