如何转换javascript等效算法将YYYYMMDD转换为MJD修改julan天到bash脚本这里是javascript代码
function YMDtoMJD (year, month, day)
{
var year;
var monthi
var day;
var yr = Math.floor (year);
var mn = Math.floor (month);
var day = Math.floor (day);
var hr = 0.0; // Hours are not valid
var L;
var julian;
var mjd;
// In leap years, -1 for Jan, Feb, else 0
L = Math.ceil ((mn - 14) / 12);
var p1 = day - 32075 + Math.floor (1461 * (yr + 4800 + L) / 4);
var p2 = Math.floor (367 * (mn - 2 - L * 12) / 12);
var p3 = 3 * Math.floor (Math.floor ((yr + 4900 + L) / 100) / 4);
julian = p1 + p2 - p3;
julian = julian + (hr / 24.0) - 0.5;
mjd = julian - 2400000.5;
return (mjd);
}
我尝试使用bash脚本,但卡在中间
#!/bin/bash
#clear
mn=12
Yr=2014
Dd=23
L=`ceil $((($mn-14)/12))`
p1=$(($Dd-32075+`floor $(((1461*(($Yr+4800+$L)/4))))`))
请帮我转换为bash 下面是我正在使用的楼层和ceil功能
floor_val=
function floor() {
float_in=$1
floor_val=${float_in/.*}
}
float_val=$1
floor $float_val
echo $floor_val
ceil_val=
function ceiling() {
float_in=$1
ceil_val=${float_in/.*}
ceil_val=$((ceil_val+1))
}
float_val=$1
ceiling $float_val
echo $ceil_val
答案 0 :(得分:0)
对于ceil(a,b)函数,您可以使用公式 ceil = 1 + floor((a-1)/ b)
function ceil() { echo $((1+(($1-1)/$2))); }
如果你有 bc ,你也可以使用它。
答案 1 :(得分:0)
我认为实现任务的最简单方法是使用date
命令,而不是自己做数学。您可以通过--date
选项指定要显示的日期和时间(而不是默认使用的当前日期和时间)。幸运的是,date
足够智能,可以默认正确识别几种格式(包括你拥有的格式)。然后使用+FORMAT
语法指定希望输出日期和时间的格式。
例如:
$ date --date='20160921' +'%m%y%d'
091621
有关可用格式的详细信息,请查看the man page或GNU Coreutils manual的相关部分。
不幸的是,这仅适用于date
的GNU版本。 POSIX standard未指定--date
选项。
答案 2 :(得分:0)
我使用这个:
DAY="20200101"
MJD=$(( ( $(date +%s -d "$DAY") / 86400 ) + 40588 ))
#echo $MJD
58849