datetime - 如何在特定时区中查找php中的星期几
使用php处理日期/时间时我很困惑。
我要做的是这样的:当用户访问我的页面时,我会询问他的时区,然后显示一周中的某一天' 在他的时区。
我不想使用浏览器的一天。我想在php中进行这个计算。
这就是我试图实现它的方式:
- 用户输入的时区
- 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));
输出为:Tue
$tempDate = '2012-07-10';
echo date('D', strtotime( $tempDate));
输出为:Tue
非常感谢你们的快速评论。
这就是我现在要用的东西。在这里发布功能,以便有人可以使用它。
public function getDayOfWeek($pTimezone)
{
$userDateTimeZone = new DateTimeZone($pTimezone);
$UserDateTime = new DateTime("now", $userDateTimeZone);
$offsetSeconds = $UserDateTime->getOffset();
//echo $offsetSeconds;
return gmdate("l", time() + $offsetSeconds);
}
如果您发现任何更正,请报告。
我认为这是正确答案,只需将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]
另一种快捷方式:
date_default_timezone_set($userTimezone);
echo date("l");
如果你可以获得他们的时区偏移量,你可以将它添加到当前时间戳,然后使用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);
这应该工作(没有测试它,所以YMMV)。 它的工作原理是存储脚本的当前时区,将其更改为用户指定的时区,从指定时间戳的date()
函数获取星期几,然后将脚本的时区设置回 这是什么开始。
不过,您可能会遇到一些带有时区标识符的冒险。
"星期几" 实际上你可以直接从php date()函数获得格式为" l" 或" N" 分别。 看一下手册
编辑:对不起,我没有正确阅读Kalium的帖子,他已经解释过了。 我的错。
检查日期是星期一或星期日,在上个星期一或最后一个星期日之前
public function getWeek($date){
$date_stamp = strtotime(date('Y-m-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('Y-m-d', strtotime('Last Monday', $date_stamp));
}
//end week
if($stamp == 'Sunday'){
$week_end = $date;
}else{
$week_end = date('Y-m-d', strtotime('Next Sunday', $date_stamp));
}
return array($week_start, $week_end);
}
基于其他一个解决方案,其标志可在周日或周一开始的周之间切换
function getWeekForDate($date, $weekStartSunday = false){
$timestamp = strtotime($date);
// Week starts on Sunday
if($weekStartSunday){
$start = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Sunday', $timestamp));
$end = (date("D", $timestamp) == 'Sat') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Saturday', $timestamp));
} else { // Week starts on Monday
$start = (date("D", $timestamp) == 'Mon') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Last Monday', $timestamp));
$end = (date("D", $timestamp) == 'Sun') ? date('Y-m-d', $timestamp) : date('Y-m-d', strtotime('Next Sunday', $timestamp));
}
return array('start' => $start, 'end' => $end);
}
echo date('l', strtotime('today'));