2016-09-21 2 views
-1

JavaScript äquivalent Algorithmus konvertieren YYYYMMDD zu MJD bearbeiten Julan Tag konvertieren Skript hier bash ist der Javascript-Codewie YYYYMMDD zu MJD-Format konvertieren bash mit

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); 
} 

ich in Bash-Skript versucht, aber steckte in Mitte

#!/bin/bash 
#clear 

mn=12 
Yr=2014 
Dd=23 

L=`ceil $((($mn-14)/12))` 

p1=$(($Dd-32075+`floor $(((1461*(($Yr+4800+$L)/4))))`)) 

Bitte helfen sie mir, es zu konvertieren unter bash ist mein Boden und ceil Funktion i

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 
bin mit
+1

Es gibt keinen 'floor' Befehl in' bash'. – Barmar

+1

Aber Sie brauchen es nicht, weil 'bash' Arithmetik Integer-only ist. Division gibt immer den Boden zurück. – Barmar

Antwort

0

Für ceil (a, b) Funktion, die Sie die Formel ceil = 1 + floor ((a-1)/b)

function ceil() { echo $((1+(($1-1)/$2))); } 

Wenn Sie bc haben können, können Sie das auch.

0

Anstatt die Mathematik selbst zu tun, denke ich, dass der einfachste Weg, um die Aufgabe zu erreichen wäre, den date Befehl zu verwenden. Sie können über die Option --date das Datum und die Uhrzeit angeben, an der es angezeigt werden soll (anstelle des aktuellen Datums und der Uhrzeit, die standardmäßig verwendet werden). Glücklicherweise ist date intelligent genug, um einige Formate (einschließlich der, die Sie haben) standardmäßig korrekt zu erkennen. Dann verwenden Sie die Syntax +FORMAT, um das Format anzugeben, in dem Datum und Uhrzeit ausgegeben werden sollen.

Zum Beispiel:

$ date --date='20160921' +'%m%y%d' 
091621 

Werfen Sie einen Blick auf the man page oder den entsprechenden Abschnitt der GNU Coreutils manual, um weitere Informationen zu den verfügbaren Formaten.

Leider funktioniert das nur mit der GNU-Version von date. Die POSIX standard gibt die --date Option nicht an.

Verwandte Themen