我将时间戳添加到Firebase数据库,格式为:1476700050.83933
。
所以我想计算自创建此时间戳以来的时间,但是作为输出我得到这样的结果:1969-12-31 23:32:04 +0000
。
它看起来有些正确,但我现在能够将其转换为5分钟之前等等。
我正在做这样的计算:
let timestamp = postsArray[indexPath.row].timestamp//query timestamp from Firebase
let date = NSDate(timeIntervalSince1970: timestamp! )//Readable date
let timeSincePost = (NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date))//Calculate time since
print("TimeSince", NSDate(timeIntervalSince1970: timeSincePost))
我在很多语言中都遇到了许多类似的问题,但它们都是如此不同。我做错了吗?
答案 0 :(得分:1)
NSDate().timeIntervalSinceNow
返回值接近0
。
NSDate()
- 使用当前时间戳创建日期,您可以将其称为now
。
timeIntervalSinceNow
这里将是创建数据和方法调用的时间之间的差异,微不足道的值。
所以这个:
NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date)
可以这样看:
0 - now.timeIntervalSince(date as Date)
过去now.timeIntervalSince(date as Date)
的所有日期均为正数,0 - positive = negative
最后你从1970年1月1日开始减去时间间隔并得到你1969年的日期。顺便问一下,你为什么这样做?
此外,在Swift 3中停止使用NSDate
,只需使用Date
即可。
使用this method
进行timeSincePost
计算。
我现在能够将它转换为5分钟之前等...
只需将DateFormatter
与doesRelativeDateFormatting
设置为true即可,并使用Firebird时间戳记的原始日期获取stringFromDate
。
答案 1 :(得分:1)
首先,用:
let timeSincePost = (NSDate().timeIntervalSinceNow-NSDate().timeIntervalSince(date as Date))//Calculate time since
从当前时间中减去指定日期,例如结果为5秒。然后用:
print("TimeSince", Date(timeIntervalSince1970: timeSincePost))
距离原点5秒。您遇到的问题是哪个。
NSDate使用timeIntervalSince(_:)
方法来获取两个日期之间的差异。保存手动计算:
let interval = Date().timeIntervalSince(date)
这给出了秒的差异。要计算天数和分钟数等,请使用NSDateComponents
。有关如何使用此功能的有用指南,请参阅this。
答案 2 :(得分:0)
我有类似的要求,所以为此添加了日期延期:
/**
* Only allow one concurrent session per user
*
* @param Request $request
* @param User $user
* @return Response
*/
protected function authenticated(Request $request, User $user)
{
Session::put('user_id', $user->id);
$files = array_diff(scandir(storage_path('framework/sessions')), array('.', '..', '.gitignore'));
foreach ($files as $file) {
$filepath = storage_path('framework/sessions/' . $file);
$session = unserialize(file_get_contents($filepath));
if ($session['user_id'] === $user->id && $session['_token'] !== Session::get('_token')) {
unlink($filepath);
}
}
return redirect()->intended($this->redirectPath());
}