- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想获得最近的星期一的日期(即不是过去的)。
因此,如果今天是星期二(2009 年 12 月 1 日),我想获取星期一(2009 年 12 月 7 日)的日期。
我如何用 Zend_Date
做到这一点?
假设今天是星期二,我们想要获得即将到来的星期一。星期一是 future 6 天。因此,我们将添加 6 天以获得星期一的日期。
//like so:
$tuesday = Zend_Date::now();
$nextMonday = $tuesday->addDay(6);
要动态地执行此操作,我们需要确定今天是星期几:
$today = Zend_Date::now();
$dayNumber = $today->get(Zend_Date::WEEKDAY_DIGIT);
//dayNumber will now be equal to the numeric day of the week (0-6)
//example:
$weekdays = array(
0 => 'sunday',
1 => 'monday',
2 => 'tuesday' //etc...
);
要确定我们需要添加多少天才能获得所需的 future 日期,我们执行以下操作:
$daysToAdd = ( $dayWanted - $todayDayNumber + 7 );
# $dayWanted = monday(1)
# $todayDayNumber = tuesday(2)
# 7 = number of days in a week (we don't want a negative number)
# 1 - 2 + 7 = 6 days into the future
$nextMonday = $today->addDay($daysToAdd);
假设我们想要的那一天是星期三(明天), future 的一天。我们以前的解决方案将不起作用:
$daysToAdd = ( $dayWanted - $todayDayNumber + 7 );
# $dayWanted = wednesday(3)
# $todayDayNumber = tuesday(2)
# 7 = number of days in a week
# 3 - 2 + 7 = 8 days into the future (not 1)
我们可以通过添加 modulus operator 来解决这个问题(百分号)添加到我们的公式中以获得除法运算的余数。
$daysToAdd = ( $dayWanted - $todayDayNumber + 7 ) % 7;
# (3 - 2 + 7) % 7
# $daysToAdd == 1 (remainder of 8 divided by 7)
$tomorrow = $today->addDay($daysToAdd);
现在我们的公式将按预期工作......除了一件事。如果今天是星期二,我想得到下星期二,我们的公式将在今天返回,而不是从今天开始的一周:
$daysToAdd = ( $dayWanted - $todayDayNumber + 7 ) % 7;
# (2 - 2 + 7) % 7 == 0
# 7 goes into 7 evenly with no remainder
我们必须添加一个检查以确保它不等于零。
if ($daysToAdd == 0) {
//give me the date a week from today, not today's date
$daysToAdd = 7;
}
public function outputDate()
{
$monday = $this->getDateOfNext('monday');
echo 'today: ' . Zend_Date::now()->toString(Zend_Date::RFC_850) . "<br>";
echo "monday: " . $monday->toString(Zend_Date::RFC_850);
}
private function getDateOfNext($dayWanted)
{
$weekdays = array('sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday');
if (!in_array($dayWanted, $weekdays)) {
throw new Exception("'$dayWanted' not found in array of possible weekdays");
}
$weekdays = array_flip($weekdays);
$date = Zend_Date::now();
$today = $date->get(Zend_Date::WEEKDAY_DIGIT);
$daysToAdd = ( $weekdays[$dayWanted] - $today + 7 ) % 7;
if ($daysToAdd == 0) {
//give me the date a week from today, not today's date
$daysToAdd = 7;
}
$date->addDay($daysToAdd);
return $date;
}
最佳答案
逻辑如下:
$days_per_week = 7;
$weekdays = array_flip(array('sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'));
$day_wanted = 'mon';
$days_forward =
( $weekdays[$day_wanted] - $date->get(Zend_Date::WEEKDAY_DIGIT) + $days_per_week )
% $days_per_week;
$date->addDay($days_forward);
这适用于任何 $day_wanted
。
关于php - Zend_Date : How to get the date of an upcoming day?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931349/
我正在使用 Zend_Date设置并获取年份,但未将其设置为正确的年份。我将年份设置为 2010,它返回年份为 2009。我做错了什么? Zend_Date中是否有错误? $date = new Ze
我的日期格式为“2015-05-01 00:00:00”,并且我还有它所属的区域设置,例如:en_US、de_DE。我需要将此日期(只是日期)转换为本地化日期格式。我尝试使用类似的东西, $loca
我写了这个函数: public function calcDifferentDate($dateStart, $dateEnd = false, $output = Zend_Date::DAY) {
据我所知,在 Zend Framework 中处理日期的最佳方法是从数据库中选择它们作为 Unix 时间戳。 Quick Creation of Dates from Database Date Va
我一直在尝试使用 $rowUser->fecha = new Zend_Date(); 向数据库中插入时间戳;但是当我检查数据库时,我总是在该字段中找到“0000-00-00 00:00:00”。 我
我想检查 Zend_Date 日期时间是否在同一天。我该怎么做? $date1 = new Zend_Date('2011-11-14 10:45:00'); $date2 = new Zend_Da
我有一个使用 Zend_Date 来显示日期的应用程序。 Zend_Date 实例是使用来自 MySQL 的日期时间数据、用户输入和当前日期创建的。 我希望我的用户能够指定他们的时区,并且所有日期都以
我正在使用 Zend_Date 来管理日程安排应用程序中的日期/时间。 我能够确定用户时区的唯一方法是通过 Javascript,它只提供时区偏移量。 Zend_Date 似乎只采用“America/
在我的应用程序中,我使用 Zend_Date。我已经设置了 date_default_timezone_set('UTC') 因为在内部和数据库中我只想有 UTC 时间。 对于用户,我想在他们的本地时
坦率地说,我很困惑。谁能告诉我为什么我会收到此代码的失败消息? $date = Zend_Date::now(); $date = $date->getIso(); if(Zend_Date::isD
我有一个很奇怪的问题, Zend_Date 正在将我的时间戳转换为一年前。 在我的行动中: // Timestamp $intTime = 1293922800; // Zend_Date objec
我正在使用 php 和 zend 框架创建一个 Web 应用程序,并尝试使用以下代码将新行插入数据库: class PriceWatcher_PriceTable extends Zend_Db_Ta
我们有一个 Cron-Script,它可以检测 - 如果某些用户被踢出了我们的应用程序。如果特定值为 1,我们可以检测到这一点 - 但在流中,没有设置新条目。脚本每小时运行一次。大多数未检测到。但自
我有两个 Zend_Date 类的对象,我想计算它们在整个日历月中的差异。我该怎么做? sub($d2)->get(Zend_Date::MONTH); assert($months == -25);
我想获得最近的星期一的日期(即不是过去的)。 因此,如果今天是星期二(2009 年 12 月 1 日),我想获取星期一(2009 年 12 月 7 日)的日期。 我如何用 Zend_Date 做到这一
“2012 年 3 月 25 日”是捷克共和国时间从凌晨 02:00 更改为凌晨 03:00 的日期。在那一天,我网站上的一个功能停止正常工作,客户提示等等。 挖掘了几个小时后,我发现那天 Zend_
我是一名优秀的程序员,十分优秀!