问题描述
我想计算两个日期之间的时间,以分钟为单位,同时,其中仅包括08:00:00
和16:30:00
之间的时间,还不包括周六和周日。我该如何实现?以下是我的代码,它通常只计算两个日期之间的时间。
foreach($result as $row)
{
$sub_array = array();
$sub_array[] = floor((strtotime($row['app_2_date'])-strtotime($row['app_1_date']))/(60));
$data[] = $sub_array;
}
我尝试了以下代码,但仍然无法正常工作
foreach($result as $row)
{
if
(
date('H:i:s',strtotime($row['app_2_date'])) > date('H:i:s',strtotime('1970-01-01 16:30:00'))||
date('H:i:s',strtotime($row['app_2_date'])) < date('H:i:s',strtotime('1970-01-01 08:00:00'))
)
{
$sub_array[] = floor((strtotime($row['app_3_date'])-strtotime($row['app_2_date']))/(60))-(15.5*60);
}
else
{
$sub_array[] = floor((strtotime($row['app_3_date'])-strtotime($row['app_2_date']))/(60));
}
}
解决方法
add_action('init','add_gng_offer');
function add_gng_offer() {
$labels = array(
'name' => 'GnG Offer','singular_name' => 'GnG Offer','add_new' => 'Add New Offer','add_new_item' => 'Add new Offer','edit_item' => 'Edit Offer','new_item' => 'Add New Offer','view_items' => 'View Offers','search_items' => 'Search Offers','not_found' => 'No Offers Found','not_found_trash' => 'No Offers Found In Trash',);
$supports = array(
'title','editor','thumbnail','comments','revisions'
);
$args = array(
'labels' => $labels,'supports' => $supports,'public' => true,'capablity_type' => 'post','rewrite' => array('slug' => 'GnG Offers'),'has_archive' => true,'menu_position' => 6,'menu_icon' => 'dashicons-calendar-alt','register_meta_box' => '',);
register_post_type('GnG Offers',$args);
}
//Creating meta Boxes for Custom Post Type
function product_id_meta_box () {
add_meta_box(
'product_id','Product Field','product_function_callback','GnG Offer','side','default'
);
}
add_action('add_meta_boxes','product_id_meta_box');
,
这是一种面向对象的方法。我使用的是PHP 7.4.9版。
我假设您拥有Composer带给PHP项目的力量。
我已经使用Carbon库创建了这个示例,以扩展默认的DateTime API。
use Carbon\Carbon;
use Carbon\CarbonPeriod;
use Carbon\CarbonInterval;
$start = Carbon::now();
$end = $start->copy()->addMonth();
$days = new CarbonPeriod($start,$end);
$workDays = [];
foreach ($days as $day) {
if (! $day->isWeekend()) {
$dayStart = $day->isSameDay($start) ?
$start : $day->copy()->setTime(8,00);
$dayEnd = $day->isSameDay($end) ?
$end : $day->copy()->setTime(16,30);
$workDays[] = new CarbonPeriod(
$dayStart,$dayEnd,CarbonInterval::minute()
);
}
}
$minutes = 0;
foreach ($workDays as $workDay) {
$minutes += iterator_count($workDay);
}
var_dump($minutes) // int(11242)
请注意,我没有仔细检查结果。
测试用例
为了快速测试此方法,您可以使用interactive PHP shell like PsySH。
在这种情况下,我假设:
- 您正在使用类似UNIX的系统。
- PHP已安装并在您的CLI中可用。
- GIT已安装并在您的CLI中可用。
- 未安装/不提供Composer。
git clone [email protected]:briannesbitt/Carbon.git carbon
cd carbon
php -r "copy('https://getcomposer.org/download/1.10.13/composer.phar','composer');"
chmod u+x composer
./composer install
./composer require psy/psysh
./vendor/bin/psysh
PsySH正在运行,您就可以进入。现在将PHP代码示例复制到剪贴板中,然后粘贴到PsySH shell中。