Add DateTime writing support to SLMessages
There may be some value in providing a read version of this as well, but it is comprised of so many properties that I'm leaving that out for now. If it becomes a need in the future, it will be straightforward to add.
This commit is contained in:
@ -150,6 +150,21 @@ exports.SLMessage = class SLMessage extends SmartBuffer {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
writeSLDateTime(date) {
|
||||||
|
this.writeInt16LE(date.getFullYear());
|
||||||
|
this.writeInt16LE(date.getMonth() + 1);
|
||||||
|
var dayOfWeek = date.getDay() - 1;
|
||||||
|
if (dayOfWeek < 0) {
|
||||||
|
dayOfWeek = 6;
|
||||||
|
}
|
||||||
|
this.writeInt16LE(dayOfWeek);
|
||||||
|
this.writeInt16LE(date.getDate());
|
||||||
|
this.writeInt16LE(date.getHours());
|
||||||
|
this.writeInt16LE(date.getMinutes());
|
||||||
|
this.writeInt16LE(date.getSeconds());
|
||||||
|
this.writeInt16LE(date.getMilliseconds());
|
||||||
|
}
|
||||||
|
|
||||||
static slackForAlignment(val) {
|
static slackForAlignment(val) {
|
||||||
return (4 - val % 4) % 4;
|
return (4 - val % 4) % 4;
|
||||||
}
|
}
|
||||||
|
@ -172,4 +172,21 @@ describe('SLMessage utilities', function() {
|
|||||||
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
assert.strictEqual(decodedMsg.dataLength, decodedMsg.readOffset - 8);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('encodes Date as SLTime', function() {
|
||||||
|
let msg = new SLMessage();
|
||||||
|
let date = new Date(2021, 8, 6, 22, 8, 5);
|
||||||
|
msg.writeSLDateTime(date);
|
||||||
|
let decodedMsg = new SLMessage(msg.toBuffer());
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 2021);
|
||||||
|
// javascript Date() month is 0-based, ScreenLogic month matches the calendar
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 9);
|
||||||
|
// ScreenLogic day-of-week starts with Monday as 0
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 0);
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 6);
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 22);
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 8);
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 5);
|
||||||
|
assert.equal(decodedMsg.readUInt16LE(), 0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user