我需要在一段时间内获得某些工作日.平日可以只有一个或多个,例如仅在所有星期一或所有星期一,星期二和星期三.
我想将DatePeriod与DateInterval :: createFromDateString一起使用
DateInterval :: createFromDateString接受相对格式.
如何将一个或多个工作日作为相对格式传递到DateInterval :: createFromDateString.这有可能吗?
在相对格式中,我找不到可以做到的"每个"格式
$i = DateInterval::createFromDateString('every Monday');
Run Code Online (Sandbox Code Playgroud) 即使在软件之外,以截断的方式传达时间或日期间隔也是很平常的事。例如:1h10m转换为“一小时十分钟”。
这可以抽象为一组规则。例如:一个日期间隔被表示为的组合_h,_m(等),其中_的符号代表非负整数或浮点数,其被概括成一个日期间隔对象。
允许混合天,小时,分钟。例如,0.5d1h60m将是的同义词14h。
是否有类似的地方定义了这样的标准?
是否有任何功能可以将开始日期和结束日期分成$interval几天(或几个月)?例如:
$interval = new DateInterval('P10D');
$start = new DateTime('2012-01-10');
$end = new DateTime('2012-02-16');
$chunks = splitOnInterval($start, $end, $interval);
// Now chunks should contain
//$chunks[0] = '2012-01-10'
//$chunks[1] = '2012-01-20'
//$chunks[2] = '2012-01-30'
//$chunks[3] = '2012-02-09'
//$chunks[3] = '2012-02-16'
Run Code Online (Sandbox Code Playgroud)
我认为DatePeriod可以提供帮助,但我没有找到任何关于如何使用它的方法。
当我尝试输出DateTime对象时,它实际上是打印格式,例如
Y-m-d H:i:s
Run Code Online (Sandbox Code Playgroud)
码
$db = new PDO('mysql:host=localhost;dbname=xxx;charset=utf8', 'xxx', 'xxx');
$dbTime = new DateTime(current($db->query('SELECT NOW()')->fetchAll(PDO::FETCH_COLUMN, 0)));
$myTime = new DateTime();
$diff = $myTime->diff($dbTime);
echo $diff->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)
从阅读其他问题和例子,这应该工作,所以我很困惑,为什么它不是.
我有一个PHP脚本,它从数据库接收一组事件,其中包含开始/结束日期时间,表示工作时间.
Begin | End
2013-08-14 10:00:00 | 2013-08-22 09:30:00
2013-08-08 07:00:00 | 2013-08-08 15:00:00
2013-08-09 07:00:00 | 2013-08-10 07:00:00
Run Code Online (Sandbox Code Playgroud)
现在我想计算每一天的工作量.对于第一行,我想要一个像这样的输出:
Begin | End
2013-08-14 10:00:00 | 2013-08-14 23:59:59
2013-08-15 00:00:00 | 2013-08-15 23:59:59
2013-08-16 00:00:00 | 2013-08-16 23:59:59
....
2013-08-22 00:00:00 | 2013-08-22 09:30:00
Run Code Online (Sandbox Code Playgroud)
我已经看到了DatePeriod和DateInterval的一些东西,但那些没有花时间考虑.
谢谢你的帮助.
最近遇到一个简单的DateInterval问题。在我创建DateInterval具有巨大秒值的对象后,该类不会重新计算其属性,如下所示:
$interval = new DateInterval('PT6685071S');
echo $interval->format("%m months %d days %H hours %i minutes %s seconds");
Run Code Online (Sandbox Code Playgroud)
输出变为:
0 月 0 天 00 小时 0 分 6685071 秒
如何使它显示为:
2个月16天8小时57分51秒
没有将秒除以 60、分钟除以 60 等?
(希望我的计算是正确的)
我正在尝试检索 PHP 间隔的天数。当我在http://sandbox.onlinephpfunctions.com/上运行以下代码时:
$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";
Run Code Online (Sandbox Code Playgroud)
我得到:
(unknown)Done
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
输入是一个日期范围,我们需要找到该区间内所有日期的月份开始日期和月份结束日期。下面给出了示例
输入:
start date: 2018-6-15
end date: 2019-3-20
Run Code Online (Sandbox Code Playgroud)
期望的输出:
[
["month starting date","month ending date"],
["2018-6-15","2018-6-30"],
["2018-7-1","2018-7-31"],
["2018-8-1","2018-8-31"],
["2018-9-1","2018-9-30"],
["2018-10-1","2018-10-31"],
["2018-11-1","2018-11-30"],
["2018-12-1","2018-12-31"],
["2019-1-1","2019-1-31"],
["2019-2-1","2019-2-28"],
["2019-3-1","2019-3-20"]
]
Run Code Online (Sandbox Code Playgroud) 如何在几周内获得可靠的日期差异?
到目前为止我已经有了
<?php
$a = new DateTime('2010-09-01');
$b = new DateTime();
$c = $a->diff($b);
Run Code Online (Sandbox Code Playgroud)
现在我得到一个带有年,月等的DateInterval,但据我所知,一年不会有52周,所以一个月也不会有4周.
有关如何获得真实,可靠的周数的任何建议吗?
试图从秒开始生成简单的"H:i:s"字符串,但不能
例:
$iSecond = 188;
$dtF = new DateTime("@0");
$dtT = new DateTime("@$iSecond");
$size = $dtF->diff($dtT)->format('%H:%i:%s');
echo $size;
Run Code Online (Sandbox Code Playgroud)
应该显示"00:03:08",但事实上"00:3:8"
如果格式方法中还有其他日期格式选项?
我正在尝试使用date_add和在日期中加上和减去#天date_sub,但是得到一些奇怪的结果。我认为这是一个简单的答案,我对PHP并不了解,所以不知道为什么。
这是我的代码:
$y = new DateTime('2016-05-17');
$z2 = 7;
$tempy = $y;
$tempy->sub(new DateInterval('P' . $z2 . 'D'));
$startdate = date_format($tempy, "Y-m-d");
$y->add(new DateInterval('P' . $z2 . 'D'));
$enddate = date_format($y, "Y-m-d");
echo "Start: " . $startdate . " End: " . $enddate . "\r\n";
Run Code Online (Sandbox Code Playgroud)
结果如下:
Start: 2016-05-10 End: 2016-05-17
看起来,即使我使用一个临时变量$tempy作为开始日期,它仍然会对其进行修改,并且结束日期已关闭。
编辑:预期结果:
Start: 2016-05-10 End: 2016-05-24
我有下表:
create_table "activities", force: :cascade do |t|
...
t.date "start_date", null: false
t.time "start_time", null: false
t.date "end_date", null: false
t.time "end_time", null: false
...
end
Run Code Online (Sandbox Code Playgroud)
此表可以包含start_date等于end_date和其他活动的活动,这些活动以不同的日期结束start_date.
我要做的是构建一个SQL查询,它将返回两个日期之间有一些活动的所有日期.
例如:
Activity 1: start_date: 2015-04-15, end_date: 2015-04-15Activity 2: start_date: 2015-04-16, end_date: 2015-04-18该查询将接受两个参数:start_date和end_date,例如:
start_date: 2015-04-01end_date: 2015-04-30执行将返回这两个日期之间活动的所有日期.在上面的例子中,结果将是:
该应用程序使用Ruby on Rails编写,数据库使用Postgres.这可以使用Ruby代码解决,但我不希望出于性能原因这样做.
如何在Postgres中只使用一个SQL语句来实现此查询?我认为generate_seriesPostgres功能可以帮助解决这个问题,但是如何解决?
我试图获取PHP中两个DateTimes之间的分钟数:
$time = new DateTime($dateString);
$now = new DateTime;
$diff = $time->diff($now);
echo $diff->format('%m');
Run Code Online (Sandbox Code Playgroud)
结果始终为0,尽管DateTimes相隔几个小时.我怎么能以正确的方式做到这一点?
dateinterval ×13
php ×10
datetime ×9
date ×2
activerecord ×1
date-format ×1
date-math ×1
datediff ×1
duration ×1
postgresql ×1
python-3.x ×1
sql ×1