Я пытаюсь перевести библиотеку, написанную на Javascript, чтобы реализовать ее в Objective C для моего приложения iOS.iOS - Расчет Луны для Moonrise и Moonset
Ссылка на библиотеку JavaScript: https://github.com/mourner/suncalc
Я получил разные значения для восхода и захода.
Библиотека возвращается Javascript:
moonrise = Mon Nov 28 2016 06:43:49 GMT+0100 (CET)
moonset = Mon Nov 28 2016 17:10:33 GMT+0100 (CET)
Моей цель возвращается реализация C:
moonrise : 2016-11-28 02:00:00 +0000
moonset : 2016-11-28 01:00:00 +0000
я столкнулся вопрос с этой функцией:
// date/time constants and conversions
var dayMs = 1000 * 60 * 60 * 24,
J1970 = 2440588,
J2000 = 2451545;
function toJulian(date) { return date.valueOf()/dayMs - 0.5 + J1970; }
function toDays(date) { return toJulian(date) - J2000; }
function hoursLater(date, h) {
return new Date(date.valueOf() + h * dayMs/24);
}
Моей целью реализации C :
// date/time constants and conversions
#define dayMS 1000 * 60 * 60 * 24
#define J1970 2440588
#define J2000 2451545
-(double)toJulian:(NSDate *) date
{
return ([date timeIntervalSince1970] * 1000)/dayMS - 0.5 + J1970;
}
-(double)toDays:(NSDate *) date
{
double tj = [self toJulian:date];
return tj - J2000;
}
-(NSDate *)hoursLater:(NSDate *) date :(int) h
{
double d = ([date timeIntervalSince1970] * 1000) + h * dayMS/24;
NSTimeInterval seconds = d/1000;
NSDate *newDate = [NSDate dateWithTimeIntervalSince1970:seconds];
return newDate;
}
Я не вижу никаких ошибок, но мои значения ложны.
Тестовый пример:
Тест Мусор
var date = new Date();
var d = toDays(date);
console.log("d = " + d);
д = 6175,947204432916
цель C Тест
NSDate *today = [NSDate date];
double d = [self toDays:today];
NSLog(@"d = %f", d);
d = 127900386826537.265625
Если вы что-то нашли, пожалуйста, дайте мне знать.
Быстрый вопрос: 'toJulian:' возвращает тот же ответ, который, я думаю, нет. Затем попробуйте проверить каждую часть вашего расчета: «Дата.valueOf() 'получить то же самое, что' ([datetimeIntervalSince1970] * 1000) 'и т. д. – Larme
Нет, это я сейчас изучаю. Я действительно не понимаю, это календарный юлианский/григорианский вопрос? – Balanced
Я не использую JavaScript, но что должно возвращать 'date.valueOf()'? Насколько я понимаю, это миллисекунды от ...? 1970? У вас есть два значения выборки для него (один из них для 'date.valueOf()', а другой из '[datetimeIntervalSince1970]'? – Larme