【发布时间】:2010-09-27 00:15:28
【问题描述】:
我想将当前时间前 10 秒的时间倒回并以这种格式输出 date('H/i/s')
我该怎么做?
我不想获取当前时间然后从时间中删除 10 秒。
谢谢
【问题讨论】:
-
出于什么原因,您不想从
time()之类的内容中扣除 10 秒?
我想将当前时间前 10 秒的时间倒回并以这种格式输出 date('H/i/s')
我该怎么做?
我不想获取当前时间然后从时间中删除 10 秒。
谢谢
【问题讨论】:
time() 之类的内容中扣除 10 秒?
echo date('H/i/s', time()-10);
【讨论】:
time()....中减去,顺便说一句,这似乎是正确的做法)....但他们接受了??
我个人尽量避免直接使用 time() 值,因为在尝试添加或减去天/周/等时。闰年等。出于所有实际目的,strtotime() 始终可靠:
echo date('H/i/s', strtotime('-10 seconds', time())); // time() - 10 seconds
** 编辑 **
为什么time() - 10 是not good?
<?php
// this is my timezone, but it applies to any DST zones....
date_default_timezone_set('America/Montreal');
$time = strtotime('2010-11-07 02:00:05');
var_dump(date(DATE_RFC822, $time - 10));
var_dump(date(DATE_RFC822, strtotime('-10 seconds', $time)));
这个输出是
string(29) "Sun, 07 Nov 10 01:59:55 -0500"
string(29) "Sun, 07 Nov 10 01:59:55 -0400"
请注意第二个示例中 UTC 的变化?如果它不完全正确,应该是Sun, 07 Nov 10 02:59:55 -0500 (请参阅here 将其重置回正确的UTC) 减去10 到time() 是最糟糕的!它会及时返回 1 小时的时间戳。这可能会导致潜在的数据错误等。
同样的事情也适用于加减日和月;直接操作time() 根本不是一个好主意,strtotime() 将始终为给定的时间操作返回正确的时间戳。期间。
【讨论】:
echo $time - strtotime('-10 seconds', $time);。但只剩下 10 秒,而不是 3610。问题在于日期格式,而不是其计算。时间单调流逝,如果还剩 10 秒,则差为 10。如果没有 - 修复你的 date() 函数。
echo $time - strtotime('-10 seconds', $time); echo 3610 for me while echo $time - ($time - 10); echo 10... 后者是错误的(其中 $time 是“Sun, 07 Nov 10 02:00:05” 或 course )。问题不在于它在大多数情况下无关紧要,问题在于它在某些“不可预测”的情况下确实如此。
time() - 10 会产生不正确的时间戳,而strtotime('-10 seconds') 是始终 正确。你不会在这里赢。
要更改系统时间,您需要调用操作系统的 API 来更改时间。在 Linux 上,您可以使用 date 命令执行此操作:
date MMDDhhmmYYYY.ss
例如,date 092619222010.30 会将日期和时间设置为 Sep 26 2010 19:22:30。在 PHP 上,您可以尝试使用 system()1 函数来做到这一点。
$stamp = date('mdHiY.s', time()-10);
system("date $stamp");
1 如果 PHP 在 mod_php 下运行(默认设置),则 PHP 以与 Apache 相同的用户身份运行。这通常意味着您将无权执行此操作。如果发生这种情况,您可以通过调用另一个可以更改时间的脚本或程序来绕过它。
【讨论】: