Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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计算Jday(朱利安日)_Javascript_Jquery - Fatal编程技术网

用javascript计算Jday(朱利安日)

用javascript计算Jday(朱利安日),javascript,jquery,Javascript,Jquery,我需要在javascript中计算jday,为了进行客户端验证,任何人都可以帮助我如何在javascript或脚本中计算jday,以将给定的jday更改为实际日期,反之亦然 为了知道什么是JDay,我找到了以下站点 我也参考下面的网站进行计算,这是在JAVA中提到的 提前感谢根据: 如果您在实现方面遇到了更具体的问题,请在问题中提供这些细节,以便我们能够进一步提供帮助 注意:这是不正确的,因为这里忘记了Wiki上的“底部括号” 正确的公式是: a = Int((14 - Month) / 1

我需要在javascript中计算
jday
,为了进行客户端验证,任何人都可以帮助我如何在javascript或脚本中计算
jday
,以将给定的jday更改为实际日期,反之亦然

为了知道什么是JDay,我找到了以下站点

我也参考下面的网站进行计算,这是在JAVA中提到的

提前感谢

根据:

如果您在实现方面遇到了更具体的问题,请在问题中提供这些细节,以便我们能够进一步提供帮助

注意:这是不正确的,因为这里忘记了Wiki上的“底部括号”

正确的公式是:

a = Int((14 - Month) / 12)
y = Year + 4800 - a
m = Month + 12 * a - 3
JDN = Day + Int((153 * m + 2) / 5) + 365 * y + Int(y / 4) - Int(y / 100) + Int(y / 400) - 32045
new Date().getTime()/86400000+2440587.5
将获取unix时间戳,将其转换为天,并添加1970-01-01的JD,这是unix时间戳的纪元

这就是天文学家所说的朱利安日期。它定义明确。由于Unix时间戳和JD均未考虑闰秒,因此不会降低精度。请注意,JD不需要位于UTC时区(但通常是)。这个答案给出了UTC时区的JD。

Julian Day 朱利安日是自7980年周期开始以来经过的天数

1583年约瑟夫·斯卡利格(Joseph Scaliger)发明了该系统,其目的是简化计算一个日历日期和另一个日历日期之间的整数(整数)差

7980年周期是由几个传统的时间周期(太阳、月球和一个特定的罗马税收周期)组合而成的,其中7980是一个常见的倍数

第一次儒略周期的起点是公元前4713年1月1日格林威治标准时间中午,结束于3268年1月22日格林威治标准时间中午,整整7980天之后

例如,2016年1月1日的儒略日数为2457389,这是自公元前4713年1月1日起的天数

如何计算呢 正如我们所知,Unix时间是自1970年1月1日UTC 00:00:00以来的秒数,不包括闰秒,也称为历元,我们可以使用一些数学来计算儒略日,因为我们已经有了Unix时间

在实践中,GMT和UTC共享相同的当前时间,因此对此,应该没有区别

首先,我们需要知道从朱利安周期开始到Unix时间戳开始的天数。
换句话说,从公元前4713年1月1日12:00:00 GMT到1970年1月1日00:00:00 UTC的天数

有了这个固定的天数,它永远不会改变,我们只需加上从1970年1月1日到今天的天数,这就是Javascript返回的,以获得朱利安日

不加上所有这些年,只需搜索网络,它告诉我们,公元前4713年和公元1970年之间的天数差是2440588天,因为儒略周期是从中午开始的,而不是午夜,我们必须减去整整半天,即2440587.5天

因此,我们现在拥有的是
2440587.5天+UNIX时间(以天为单位)==Julian Day

通过一些简单的数学运算,我们可以计算出一天的长度是86400秒,使用Javascript时Unix时间戳是以毫秒为单位的,因此
Unix TIME/86400000
可以得到从1970年1月1日星期四到今天的天数

现在,就这一天而言,我们想要的是天数的整数,而不是小数,我们可以把它四舍五入到一整天的结束时间,做一些类似的事情

Math.floor((UNIX TIME / 86400000) + 2440587.5);
朱利安日期 有时在编程中,“朱利安日期”意味着从一年开始的天数,例如2016年6月1日将是该年的152天,等等

“朱利安日期”的正确用法是在一天的小数部分加上时间戳的朱利安日

以这个答案顶部的例子为例,2016年1月1日是朱利安纪念日2457389,我们可以在此基础上增加一个时间。
朱利安节从中午开始,没有增加分数时间,因此在午夜将是
2457389.5
,在18:00或中午后6小时,将是
2457389.25
,加上“半天”、“一刻钟”等

再计算一下 这意味着0.1朱利安日期等于24小时除以10,或
24/10==2.4小时
,或者换句话说,朱利安日时间戳是分数加小数(一天的十分之一等)

让我们看看一些Javascript函数,首先是
Date
构造函数

Javascript只能访问它运行的计算机上的本地时间,因此当我们执行
new Date()
时,它不必创建UTC日期,即使UNIX时间是UTC,
new Date
提供从历元到您的计算机的任何本地时间的秒数,不考虑你的时区

但是Javascript确实有
Date.UTC
,它将以UTC格式返回日期,让我们检查差异,这当然会根据您设置本地系统的时区而有所不同

var常规日=新日期(2016,1,1,0,0,0);
var UTC_date=日期UTC(2016,1,1,0,0,0);
var差异=UTC_日期-常规_日期;

document.body.innerHTML='本地时间与UTC之间的差值为'+(差值/1000)+'秒'此外,还有一个npm包:

在天文学和历史中使用的日期对象和朱利安日期之间转换


似乎在接受的答案中给出的最终代码是错误的。查看美国海军观测站网站上的“官方”在线计算器:


如果有人知道回答时间和日历的正确答案,那就是USNO。

无论您做什么,都不要在当前语言环境中更改策略之前的日期使用getTimezoneOffset(),因为它是完整的
Math.floor((UNIX TIME / 86400000) + 2440587.5);
  var julian = require('julian');
 
  var now = new Date();           // Let's say it's Thu, 21 Nov 2013 10:47:02 GMT 
  var jd = '';
 
  console.log(jd = julian(now));  // -> '2456617.949335' 
  console.log(julian.toDate(jd)); // -> Timestamp above in local TZ 
// For the HTML-page
<script src="../js/meuusjs.1.0.3.min.js"></script> 
<script src="../js/Astro.Solistice.js"></script>

// Javascript, Julian Date to Calender Date
function jdat (jdag) {
  var jd, year, month, day, l, n, i, j, k;
  jd = jdag;
  l = jd + 68569;
  n = Math.floor(Math.floor(4 * l) / 146097);
  l = l - Math.floor((146097 * n + 3) / 4);
  i = Math.floor(4000 * (l + 1) / 1461001);
  l = l - Math.floor(1461 * i / 4) + 31;
  j = Math.floor(80 * l / 2447);
  k = l - Math.floor(2447 * j / 80);
  l = Math.floor(j / 11);
  j = j + 2 - 12 * l;
  i = 100 * (n - 49) + i + l;

  year  = i;
  month = j;
  day   = k.toFixed(0); // Integer
  dat = day.toString() + "/" + month.toString(); // Format anyway you want.
  return dat;
}

// Below is only for Equinox and Solistice. Just skip if not relevant.

// Vernal Equinox
var jv = A.Solistice.march(year); // (year) predefined, today.getFullYear()
var vdag = jdat(jv);

// Summer Solistice
var js = A.Solistice.june(year); 
var ssol = jdat(js);    

//Autumnal Equinox
var jh = A.Solistice.september(year);
var hdag = jdat(jh);

// Winter Solistice
var jw = A.Solistice.december(year);
var vsol = jdat(jw);