我希望有人可以帮助我。 我正在尝试建立一个下拉菜单,显示接下来的4-6个星期二的正确日期。这已经有效了。现在的问题是,我需要以下内容:
如果今天是星期三,那么下拉应该从第一个星期二开始,但不是从下周开始,而是从下周的一周开始。为什么?因为我总是需要在注册和交付时间之间的整整7天。
因此,如果今天是星期一,下一个(第一个)星期二应该是下周的星期二。也就是说今天是星期五,那么我的下拉菜单不应该从下周的星期二开始,而是从下周的星期二开始。
像: 今天是星期一 - 明天将是星期二,但是没有7天,所以应该显示下一周的星期二。
这是我到目前为止所做的:
$begin = new DateTime('tuesday this week');
$end = new DateTime('last tuesday of next month');
$interval = new DateInterval( 'P1W' );
$daterange = new DatePeriod( $begin, $interval ,$end );
<select class='form-control margin-bottom-20' name='delivery_first' required>
foreach($daterange as $date){
<option value='".$date->format('d.m.Y')."'>"; echo $date->format('l'); echo $date->format('d.m.Y'); print"</option>
}
</select>
如果介于7天之间,我知道如何实施检查吗? 希望我的问题很明确。如果没有,请告诉我。
答案 0 :(得分:3)
您可以使用最小日期时间实例进行比较。
$begin = new DateTime('next tuesday');
$min = new DateTime('+7 days');
$interval = new DateInterval( 'P1W' );
if ($begin < $min) {
$begin->add($interval);
}
但是,如果你从现在开始总是想要两个星期二,那么这个简单的改变可能有用:
$begin = new DateTime('next tuesday +7 days');
答案 1 :(得分:1)
您可以使用 SummaryDefinition sr = new SummaryDefinition();
sr.SourceFieldName = "Total";
sr.Calculator = SummaryCalculator.Sum;
if (xamgrid.FieldLayouts.Count == 0)
{ xamgrid.FieldLayouts.Add(new FieldLayout()); }
xamgrid.FieldLayouts[0].SummaryDefinitions.Add(sr);
获取日期的unix时间戳(以秒为单位的值),并使用它来比较两个日期之间的时间长度。
strtotime()
答案 2 :(得分:1)
这只是伪代码,所以不要只是复制和粘贴。我认为你的$开始日期需要一个switch语句。
switch($todayDay){
case Wednesday, Thursday, Friday:
$begin = new DateTime('tuesday 2 weeks');
break;
case Monday, Tueday:
$begin = new DateTime('tuesday this week');
break;
}
答案 3 :(得分:1)
您也可以试试这个。
// create date object
$d2 = new DateTime();
//Add 6 days to the object, should be atleast six days in between
$d2->add(new DateInterval("P6D"));
// Start counting from after 6 days, take the first
// tuesday after 6 days and print the date and break out of the loop
for($i=1; $i<7; $i++){
$j="P1D";
$d2->add(new DateInterval($j));
$date2 = date('l',$d2->getTimeStamp());
if(strtolower($date2) == 'tuesday'){
echo $d2->format('Y-m-d H:i:s');
break;
}
}
答案 4 :(得分:1)
Strtotime可以在YWwwd代码中读取日期时间,例如2018W242,转换为2018周24天。
考虑到这一点,我们可以看一下星期几,然后添加到周开始变量1或2。
然后根据上面提到的格式循环和回声。
通常strtotime和date的内存和运行时间比datetime更轻。
If(date("N")>1){
$w = date("W")+2;
}Else{
$w =date("W")+1;
}
$y = date("Y");
$d = date("Y\WWN", strtotime($y . "W" . $w . "2"));
For($i=1; $i<7;$i++){
Echo date("Y-m-d", strtotime($d)+(86400*7)*$i) ."\n";
}
编辑过的代码,注意到它没有超过新的一年