{\r
new DateTime(2017, 3, 31, 21, 0, 0),\r
new DateTime(2017, 3, 31, 22, 0, 0),\r
- new DateTime(2017, 4, 1, 4, 0, 0),\r
- new DateTime(2017, 4, 1, 5, 0, 0),\r
- new DateTime(2017, 4, 1, 6, 0, 0),\r
- new DateTime(2017, 4, 2, 5, 0, 0),\r
- new DateTime(2017, 4, 2, 6, 0, 0),\r
- new DateTime(2017, 4, 2, 7, 0, 0)\r
+ new DateTime(2017, 4, 1, 1, 0, 0),\r
+ new DateTime(2017, 4, 1, 2, 0, 0),\r
+ new DateTime(2017, 4, 1, 3, 0, 0),\r
+ new DateTime(2017, 4, 2, 2, 0, 0),\r
+ new DateTime(2017, 4, 2, 3, 0, 0),\r
+ new DateTime(2017, 4, 2, 4, 0, 0)\r
}.GetEnumerator();\r
logger.SetWriter((path, s, h) => { result += s + "|"; }, () =>\r
{\r
logger.InspectMapNext(JsonParser.Parse("{\"api_get_eo_rate\": 75}"));\r
PAssert.That(() =>\r
"2017-03-31 21:00:00,0,0|2017-03-31 21:00:00,0,0|2017-03-31 22:00:00,1000,0|" +\r
- "2017-04-01 06:00:00,4000,0|2017-04-02 05:00:00,5000,0|" +\r
- "2017-04-02 06:00:00,5000,100|2017-04-02 07:00:00,5000,75|"\r
+ "2017-04-01 03:00:00,4000,0|2017-04-02 02:00:00,5000,0|" +\r
+ "2017-04-02 03:00:00,5000,100|2017-04-02 04:00:00,5000,75|"\r
== result);\r
}\r
\r
}
var result = [];
var dayEo = 0;
- var endOfMonth = null;
+ var endOfMonth = moment(0);
var monthExp = 0;
var monthEo = 0;
- var endOfYear = null;
+ var endOfYear = moment(0);
var yearExp = 0;
var carryOverAch = 0;
var carryOverEo = 0;
var prevExp = null;
+ var lastDate = moment(0);
var lastExp = -1;
- var nextDate = null;
+ var nextDate = moment(0);
for (var i = 0; i < data.length; i++) {
var row = data[i];
var date = parseDate(row[0]);
var exp = row[1] - 0;
var eo = row[2] - 0;
- var isNewYear = endOfYear == null || date.isSameOrAfter(endOfYear);
- var isNewMonth = endOfMonth == null || date.isSameOrAfter(endOfMonth);
- var isNewDate = nextDate == null || date.isSameOrAfter(nextDate);
+ var isNewYear = date.isSameOrAfter(endOfYear);
+ var isNewMonth = date.isSameOrAfter(endOfMonth);
+ var isNewDate = date.isSameOrAfter(nextDate);
if (isNewDate || isNewMonth || isNewYear) {
+ if (lastDate.add('hour', 1).isSameOrBefore(date)) {
+ // 2時を過ぎて最初のexpを戦果の計算に使うと、2時をまたいだ出撃の戦果が前日に加算される。
+ // そこで2時前のexpを使って戦果を計算するが、2時前のexpが正しく出力されていない場合は
+ // 戦果を正しく計算できない。記録の間隔が1時間以上空いているときは、2時をまたいだ出撃が
+ // 行われていない可能性が高いので計算には今のexpを使うことにする。
+ // これは5時基準で出力された過去のデータで、妥当な戦果を計算するために必要な処理である。
+ lastExp = exp;
+ }
if (nextDate != null) {
result.push([
(isNewDate ? nextDate.subtract(1, 'days') : endOfMonth).format("YYYY-MM-DD"),
carryOverAch.toFixed(1), carryOverEo.toFixed(1), (carryOverAch + carryOverEo).toFixed(1)]);
}
dayEo = 0;
- nextDate = date.clone().hour(5).startOf('hour');
- if (date.hour() >= 5)
+ nextDate = date.clone().hour(2).startOf('hour');
+ if (date.hour() >= 2)
nextDate.add(1, 'days');
if (nextDate.date() === 1)
nextDate.add(1, 'days');
}
dayEo += eo;
monthEo += eo;
+ lastDate = date;
lastExp = exp;
}
var dt = $('#achivement_table').DataTable();