在NodeJS/JavaScript中使用iOS Swift Date()

在NodeJS/JavaScript中使用iOS Swift Date(),javascript,ios,swift,date,Javascript,Ios,Swift,Date,我正在将包含Swift中生成的Date()变量的编码数据发布到节点后端 我正在编码的示例对象: Swift: let appointmentEncoded = try JSONEncoder().encode(appointment) 结果生成以下JSON字符串: [556959600,{"type":"car-wash","date_interval":{"start":557031600,"duration":1800}] “556959600”是感兴趣的编码日期()对象。我能够成功地

我正在将包含Swift中生成的Date()变量的编码数据发布到节点后端

我正在编码的示例对象:

Swift:

let appointmentEncoded = try JSONEncoder().encode(appointment)
结果生成以下JSON字符串:

[556959600,{"type":"car-wash","date_interval":{"start":557031600,"duration":1800}]
“556959600”是感兴趣的编码日期()对象。我能够成功地将其传递到节点后端进行检索

我想做的是将date对象解码为JavaScript日期,并将其编码回一个日期字符串,然后我可以传递回Swift


有没有办法将“556959600”值转换为JavaScript日期?如果是这样,我如何将其转换回“556959600”类型值?

只需创建一个新的日期对象:

var date = new Date(556959600);

如果您打印此变量,您将得到
Wed Jan 07 1970 17:42:39

自2001-01-01(Swift历元)以来,Swift时间值似乎是秒。自1970-01-01以来,Javascript时间值为毫秒,因此您可以将Swift时间值乘以1000以使其为毫秒,并将两个时间值之间的差值相加以获得等效的Javascript时间值

然后用它来确定日期,这样:

var swiftfoffset=Date.UTC(2001,0,1);//978307200000
var swiftTV=556959600;//自2001-01-01以来的秒数
var jsDate=新日期(SWIFTDOFFSET+swiftTV*1000);

log(jsDate.toString())请注意,JSON编码的Swift日期是从2001年1月1日00:00 UTC开始的以秒为单位的偏移量,而不是从1970年开始的标准Unix历元。因此Javascript日期需要考虑到这一点。如果您设置
jsonecoder
,使其
dateEncodingStrategy
设置为
.secondsSince1970
,事情可能会简单一些。默认情况下,编码器对日期使用不同的历元(请参见答案下方的注释)。@rmaddy我最终使用了这种方法。TIL关于快速历元。验证了这一点。谢谢