在 NodeJS / JavaScript 中使用 iOS Swift Date()
Posted
技术标签:
【中文标题】在 NodeJS / JavaScript 中使用 iOS Swift Date()【英文标题】:Working with iOS Swift Date() in NodeJS / JavaScript 【发布时间】:2018-08-24 02:35:05 【问题描述】:我将包含在 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”类型值?
【问题讨论】:
如果你设置了JSONEncoder
,那么事情可能会更简单,所以它的dateEncodingStrategy
设置为.secondsSince1970
。默认情况下,编码器对日期使用不同的纪元(请参阅我在答案下方的评论)。
@rmaddy 我最终采用了这种方法。
【参考方案1】:
似乎 Swift 时间值是自 2001-01-01(Swift 时代)以来的秒数。 Javascript 时间值自 1970-01-01 起以毫秒为单位,因此您可以将 Swift 时间值乘以 1000 以使其为毫秒,并将两个时间值之间的差相加以获得等效的 javascript 时间值。
然后用它来做一个日期,所以:
var swiftOffset = Date.UTC(2001,0,1); // 978307200000
var swiftTV = 556959600; // Seconds since 2001-01-01
var jsDate = new Date(swiftOffset + swiftTV * 1000);
console.log(jsDate.toString());
【讨论】:
关于 Swift 时代的 TIL。验证了这个工作。谢谢!【参考方案2】:只需创建一个新的 Date 对象:
var date = new Date(556959600);
如果你打印这个变量,你会得到Wed Jan 07 1970 17:42:39
【讨论】:
请注意,JSON 编码的 Swift 日期是 2001 年 1 月 1 日 00:00 UTC 纪元的偏移量,而不是 1970 年的标准 Unix 纪元。所以 Javascript 日期需要采用考虑到。以上是关于在 NodeJS / JavaScript 中使用 iOS Swift Date()的主要内容,如果未能解决你的问题,请参考以下文章
在 NodeJS / JavaScript 中使用 iOS Swift Date()
javascript 在Nodejs中登录到终端时,调试可以轻松使用颜色
javascript 在Nodejs中登录到终端时,调试可以轻松使用颜色