Time.now - 1.hour.ago => 3599.999604?

时间:2016-10-11 21:08:28

标签: ruby ruby-on-rails-4

<?php
require_once("phpmailer/class.phpmailer.php");

if (isset($_POST['odeslat'])){
  $allowedExts = array("doc", "docx", "xls", "xlsx", "pdf");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$telefon = $_POST['telefon'];
$text = $_POST['zprava'];

$mail = new PHPMailer();


//From email address and name
$mail->CharSet = "UTF-8";
$mail->From = "info@mail.com";
$mail->FromName = "MAIL";

//To address and name

$mail->addAddress("yourmail@mail.com"); //Recipient name is optional
$mail->AddAttachment($_FILES['file']['tmp_name'], $_FILES['file']['name']);

//Send HTML or Plain Text email
$mail->isHTML(true);

$mail->Subject = "Server email";
$mail->Body = "<p><strong>Jméno:</strong> $jmeno</p>
<p><strong>E-mail:</strong> $email</p>
<p><strong>Telefon:</strong> $telefon</p>
<p><strong>Text:</strong> $text</p>
";
$mail->AltBody = "Jméno: $jmeno \n
E-mail: $email \n
Telefon: $telefon \n
Text: $text\n
";

if(!$mail->send()) 
{
   header ("Location: http://mypage.com/dotaznik.php?e=1");
   exit();
} 
else 
{
header ("Location: http://mypage.com/dotaznik.php?o=1");
exit();
}
}
?>

导致此问题的代码评估是什么?

我理解这里评估了2个代码路径,我假设ruby首先计算表达式,然后计算public function delete($id = null) { $this->User->id = $id; if (!$this->User->exists()) { throw new NotFoundException(__('Invalid user')); } if ($this->User->saveField('status', 0);) { $this->Flash->success(__('User deleted')); return $this->redirect(array('action' => 'index')); } $this->Flash->error(__('User was not deleted')); return $this->redirect(array('action' => 'index')); } 表达式,然后才计算irb(main):012:0> Time.now - 1.hour.ago => 3599.999604 表达式。 2之间的时差是ruby解释器运行评估所需的时间。

2 个答案:

答案 0 :(得分:4)

确定现在的时间需要很短但非零的时间。在这种情况下,差异是395μs。在我的机器上使用Ruby 2.3.1进行的快速测试显示出16μs的差异,这更像我期望的。我不确定为什么计算机器上的当地时间需要这么长时间,但这可能只是一个随机的事情。

如果您想要完全值,请尝试以下操作:

Time.now - 1.hour

请记住,时间是完全疯狂的,“一小时前”可能意味着两小时前,或零小时前,或者完全取决于您何时调用此代码。夏令时混淆了它触及的一切。

答案 1 :(得分:2)

这不仅仅是红宝石。您的操作系统也可以中断您的程序,并导致1.hour.agoTime.now之间的巨大误差

您可以通过冻结参考时间来阻止它

t = Time.now
t - 1.hour.ago(t)