如何在特定时区的PHP中查找星期几

93 php timezone datetime

使用php处理日期/时间时我很困惑.

我想要做的是:当用户访问我的页面时,我会询问他的时区,然后在他的时区显示"星期几".

我不想使用浏览器的一天.我想在php中进行这个计算.

这就是我试图实现它的方式:

  1. 用户输入的时区
  2. Unix时间戳由php time()函数计算.

但我不知道如何继续......我将如何在这个时区获得"星期几".

Bot*_*res 145

$dw = date( "w", $timestamp);
Run Code Online (Sandbox Code Playgroud)

$ dw将是0(星期日)到6(星期六),你可以在这里看到:http: //www.php.net/manual/en/function.date.php

  • 从php 5.1.0开始,你可以使用`date("N",$ timestamp)`从星期一开始获取`1..7`值.在旧版本中,您可以使用技巧`(日期("​​w",$ timestamp)+ 6)%7`从星期一开始获取"0..6"值. (64认同)
  • 我很困惑.这有多少票?问题是如何在特定时区获取星期几,而不是网络服务器的时区,而不是GMT.这回答了问题的第一部分,但完全忽略了问题的第二部分. (22认同)
  • @tfinniga,我认为原因是很多人在搜索如何获得星期几时(就像我一样)来讨论这个问题,然后将其投票,因为它回答了他们的问题:) (6认同)

tra*_*nte 115

我的解决方案是:

$tempDate = '2012-07-10';
echo date('l', strtotime( $tempDate));
Run Code Online (Sandbox Code Playgroud)

输出是: Tuesday

$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));
Run Code Online (Sandbox Code Playgroud)

输出是: Tue


小智 20

非常感谢你们的快速评论.

这就是我现在要用的东西.在这里发布功能,以便有人可以使用它.

public function getDayOfWeek($pTimezone)
{

    $userDateTimeZone = new DateTimeZone($pTimezone);
    $UserDateTime = new DateTime("now", $userDateTimeZone);

    $offsetSeconds = $UserDateTime->getOffset(); 
    //echo $offsetSeconds;

    return gmdate("l", time() + $offsetSeconds);

}
Run Code Online (Sandbox Code Playgroud)

如果您发现任何更正,请报告.


cjo*_*son 18

我认为这是正确答案,只需更改Europe/Stockholm为用户时区即可.

$dateTime = new \DateTime(
    'now',
    new \DateTimeZone('Europe/Stockholm')
);
$day = $dateTime->format('N');
Run Code Online (Sandbox Code Playgroud)

ISO-8601星期几的数字表示(在PHP 5.1.0中添加)1(星期一)到7(星期日)

http://php.net/manual/en/function.date.php

有关支持的时区列表,请参阅 http://php.net/manual/en/timezones.php


And*_*dre 8

另一种快捷方式:

date_default_timezone_set($userTimezone);
echo date("l");
Run Code Online (Sandbox Code Playgroud)


nic*_*ckf 5

如果你可以获得他们的时区偏移量,你可以将它添加到当前时间戳,然后使用gmdate函数来获取它们的本地时间.

// let's say they're in the timezone GMT+10
$theirOffset = 10;  // $_GET['offset'] perhaps?
$offsetSeconds = $theirOffset * 3600;
echo gmdate("l", time() + $offsetSeconds);
Run Code Online (Sandbox Code Playgroud)


Kal*_*ium 3

$myTimezone = date_default_timezone_get();
date_default_timezone_set($userTimezone);
$userDay = date('l', $userTimestamp);
date_default_timezone_set($myTimezone);
Run Code Online (Sandbox Code Playgroud)

这应该有效(没有测试它,所以 YMMV)。它的工作原理是存储脚本的当前时区,将其更改为用户指定的时区,在指定的时间戳处从函数获取星期几date(),然后将脚本的时区设置回开始时的时区。

不过,您可能会遇到一些关于时区标识符的冒险。