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

我很困惑,而使用PHP来处理date/时间。

我想要做的是这样的:当用户访问我的页面时,我正在询问他的时区,然后在他的时区显示“星期几”。

我不想使用浏览器的一天。 我想在php中做这个计算。

我正在努力实现这个目标:

  1. 用户input的时区
  2. Unix时间戳由php的time()函数计算得出。

但我不知道如何进行…我如何得到在这个时区“星期几”。

$dw = date( "w", $timestamp); 

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

我的解决办法是:

 $tempDate = '2012-07-10'; echo date('l', strtotime( $tempDate)); 

输出是: Tuesday

 $tempDate = '2012-07-10'; echo date('D', strtotime( $tempDate)); 

输出是: Tue

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

这是我现在要使用的。 在这里发布function,以便有人可以使用它。

 public function getDayOfWeek($pTimezone) { $userDateTimeZone = new DateTimeZone($pTimezone); $UserDateTime = new DateTime("now", $userDateTimeZone); $offsetSeconds = $UserDateTime->getOffset(); //echo $offsetSeconds; return gmdate("l", time() + $offsetSeconds); } 

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

另一种快捷方式:

 date_default_timezone_set($userTimezone); echo date("l"); 

我认为这是正确的答案,只是将Europe/Stockholm更改为用户时区。

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

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

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

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

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

 // let's say they're in the timezone GMT+10 $theirOffset = 10; // $_GET['offset'] perhaps? $offsetSeconds = $theirOffset * 3600; echo gmdate("l", time() + $offsetSeconds); 
 $myTimezone = date_default_timezone_get(); date_default_timezone_set($userTimezone); $userDay = date('l', $userTimestamp); date_default_timezone_set($myTimezone); 

这应该工作(没有testing,所以YMMV)。 它通过存储脚本的当前时区,将其更改为用户指定的时区,从指定时间戳的date()函数获取星期几,然后将脚本的时区设置回到开头。

虽然你可能有一些带有时区标识符的冒险。

“星期几”实际上是可以直接从php date()函数中以“l”或“N”格式获得的。 看看手册

编辑:对不起,我没有正确阅读Kalium的post,他已经解释过了。 我的错。

检查date是星期一或星期天,在上星期一或星期天

  public function getWeek($date){ $date_stamp = strtotime(date('Ym-d', strtotime($date))); //check date is sunday or monday $stamp = date('l', $date_stamp); $timestamp = strtotime($date); //start week if(date('D', $timestamp) == 'Mon'){ $week_start = $date; }else{ $week_start = date('Ym-d', strtotime('Last Monday', $date_stamp)); } //end week if($stamp == 'Sunday'){ $week_end = $date; }else{ $week_end = date('Ym-d', strtotime('Next Sunday', $date_stamp)); } return array($week_start, $week_end); } 

根据其他解决scheme之一,在星期日或星期一开始的几个星期之间切换

 function getWeekForDate($date, $weekStartSunday = false){ $timestamp = strtotime($date); // Week starts on Sunday if($weekStartSunday){ $start = (date("D", $timestamp) == 'Sun') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Last Sunday', $timestamp)); $end = (date("D", $timestamp) == 'Sat') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Next Saturday', $timestamp)); } else { // Week starts on Monday $start = (date("D", $timestamp) == 'Mon') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Last Monday', $timestamp)); $end = (date("D", $timestamp) == 'Sun') ? date('Ym-d', $timestamp) : date('Ym-d', strtotime('Next Sunday', $timestamp)); } return array('start' => $start, 'end' => $end); } 
 echo date('l', strtotime('today'));