【问题标题】:Unix timestamp for today at specific time今天特定时间的 Unix 时间戳
【发布时间】:2016-12-01 08:06:49
【问题描述】:

我正在使用此代码在 php 中获取当前的 unix 时间。

echo time();

它给了我这个结果

1480578383

如果我将其转换为可读日期,那么它将是

Thu, 01 Dec 2016 07:46:23 GMT

好吧,我不想那样。我想要的是一个函数,它可以给我今天的日期,具体时间是 23:00:00。

当我将它转换为可读日期时,它应该是

Thu, 01 Dec 2016 23:00:00 GMT

“2016 年 12 月 1 日,星期四”是当前日期。

【问题讨论】:

  • 具体时间是什么意思?您给出的示例与您不想要的示例相同吗?请澄清。谢谢!
  • 如果您所在位置是 23:00,请修复 unix 机器的时钟。如果您所在位置是 7:46,则该功能运行良好。如果您希望当前日期与任何其他时间一起使用,您可以使用(time()/86400)*86400 去除时间,然后添加即23*60*60
  • echo (new DateTime("23:00"))->format('r');
  • @Holger 您的建议不起作用。数学不是那样工作的。首选方法是使用DateTime

标签: php date unix time


【解决方案1】:

我会假设规范是:

在当前时区的今天 23:00:00 获取

代码如下所示:

mktime(23, 0, 0);

... 或:

strtotime('today 23:00:00')

...或者只是:

strtotime('23:00:00')

Test code:

$time_zones = array(
    'America/Chicago',
    'GMT',
    'Europe/Berlin',
);
foreach($time_zones as $time_zone){
    date_default_timezone_set($time_zone);
    $t1 = mktime(23, 0, 0);
    $t2 = strtotime('today 23:00:00');
    $t3 = strtotime('23:00:00');
    echo date('r', $t1) . ' / ' . date('r', $t2) . ' / ' . date('r', $t3) . PHP_EOL;
}
Fri, 02 Dec 2016 23:00:00 -0600 / Fri, 02 Dec 2016 23:00:00 -0600 / Fri, 02 Dec 2016 23:00:00 -0600
Fri, 02 Dec 2016 23:00:00 +0000 / Fri, 02 Dec 2016 23:00:00 +0000 / Fri, 02 Dec 2016 23:00:00 +0000
Fri, 02 Dec 2016 23:00:00 +0100 / Fri, 02 Dec 2016 23:00:00 +0100 / Fri, 02 Dec 2016 23:00:00 +0100

请在mktime()strtotime() 手册页上找到更多详细信息。

【讨论】:

  • 我也可以使用它,但它可以工作。我必须使用 date_default_timezone_set 函数来设置时区。有没有办法在不使用 date_default_timezone_set 函数的情况下获得正确的日期。
  • 这只是一种测试代码是否正常工作的方法。您不必每次使用代码时都运行测试。您可以只复制并粘贴第一行代码,而忽略“测试代码”语句下面的所有内容。
  • 对我来说它不能正常工作。它显示的是 22 小时而不是 23 小时
  • 如果您不关心时区,您的代码将使用系统的默认时区运行。如果您在当地公司购买主机,这可能没问题。
  • 在这种情况下,mktime 和 strtotime 哪个更快?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2016-08-23
相关资源
最近更新 更多