【问题标题】:Map iso8601 date time string to Julian Day using javascript使用 javascript 将 iso8601 日期时间字符串映射到 Julian Day
【发布时间】:2013-12-18 19:28:16
【问题描述】:

有没有人有一个来自 ISO-8601 日期时间字符串的紧凑/优雅的地图,格式如下:

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

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

【问题讨论】:

标签: javascript date timestamp iso8601 julian-date


【解决方案1】:

这是一种方法。

您可以将 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

【讨论】:

  • 很抱歉投了反对票,但 moment.js 没有任何计算儒略日数的功能。
  • 很公平。但我有个问题。通过儒略日数,您(和 OP)是否正在寻找自公元前 4713 年 1 月 1 日以来经过的天数?这适用于什么领域?我的猜测是天文学?
  • 儒略日与儒略历有关。你可以阅读它here。考虑到儒略历和公历之间的差异,它可以通过计算自公元前 4714 年 11 月 24 日以来由 prolepetic 公历(prolepetic 的意思,假设它始终有效,即使它一直有效)来计算不是)。是的,它用于天文学等领域。
  • 您可能使用 moment.js 来解析 ISO 日期/时间并从那里计算儒略日期。提示:2000 年 1 月 1 日的儒略日期为 2451545。如果您愿意编辑以提供这样的功能,我将很乐意投票。
  • 我发现的参考资料显示午夜为 0.5,例如:aa.usno.navy.mil/data/docs/JulianDate.php
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多