php把时间改为星期,PHP DateTime()类,将一周的第一天更改为星期一

只要您所在国家/地区的一周中的第一天是星期日,PHP(5.3+)中的DateTime类就可以很好地工作。在荷兰,每周的第一天是星期一,这使得该班级无法用周视图和计算来构建日历。

我似乎找不到关于Stackoverflow或Internet其余部分的答案,如何让DateTime像一周的第一天是星期一那样工作。

我在Stackoverflow上找到了这篇文章,但是它并不能解决您遇到的所有麻烦,而且它不是一个很好的解决方案。

$dateTime = new DateTime('2012-05-14');

$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');

有没有办法更改此日期或范围DateTime?很难想象这不是一个背景,因为欧洲大部分地区都在星期一开始他们的工作。

补充:

发布完整的日历和功能代码将使事情变得更清晰。但是这里是一个例子。我经常必须检查一周的第一天是什么,或者计算从一周的第一天到该周中不同的日期和时间。我的代码充满了这些:

$startOfWeek = $date->modify(('Sunday' == $date->format('l')) ? 'Monday last week' : 'Monday this week')->modify('+3 hours')->format(DATETIME);

尝试获取月份或年份的第一个完整周时,我也得到了不良结果。由于我的$

date对象并不总是包含相同的日期,因此我必须继续以这种方式检查它,从而使代码难以阅读。在此日历上还有更多要做的编程工作,我无法预料它将在哪里再次出错。

编辑 虽然有一些不一致之处。由于某种奇怪的原因,DateTime确实获得了下一个权利:

$test = new DateTime('2012-10-29'); // Monday

echo $test->modify('Sunday this week')->format('Y-m-d'); // 2012-11-04

// But...

$test = new DateTime('2012-11-04'); // Sunday

echo $test->modify('Monday this week')->format('Y-m-d'); // 2012-11-05 instead of 2012-10-29

但是我想我可以使问题更清楚: DateTime()类可以与monday一起用作一周的第一天。 如果不是,可以将班级扩展为使用星期一作为一周的第一天。

更新:

好的,我想我要走了……我不是编码课程的专业人士。但这似乎在数周内都有效。但是它仍然需要第一天,第二天…以及星期天本身的名称规则。我认为这不是万无一失的。我将不胜感激来修复它。

class EuroDateTime extends DateTime {

// Fields

private $weekModifiers = array (

'this week',

'next week',

'previous week',

'last week'

);

// Override "modify()"

public function modify($string) {

// Search pattern

$pattern = '/'.implode('|', $this->weekModifiers).'/';

// Change the modifier string if needed

if ( $this->format('N') == 7 ) { // It's Sunday

$matches = array();

if ( preg_match( $pattern, $string, $matches )) {

$string = str_replace($matches[0], '-7 days '.$matches[0], $string);

}

}

return parent::modify($string);

}

}

// This works

$test = new EuroDateTime('2012-11-04');

echo $test->modify('Monday this week')->format('Y-m-d');

// And I can still concatenate calls like the DateTime class was intended

echo $test->modify('Monday this week')->modify('+3 days')->format('Y-m-d');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值