javascript - 使用 PHP 时钟显示“我们明天在 _____ 重新开放”
问题描述
所以我有一个时钟,我目前在整个 Woocommerce 商店都用它来做很多事情。它完美地运行并完成它的工作。
我使用“open”、“close”和“last_call”在站点的不同区域显示消息。它还会根据打开状态等禁用结帐中的某些内容。
我想做的是使用此功能显示“我们将在明天上午 9:00 重新开放”,或者,如果足够接近开放时间,“我们将在上午 9:00 重新开放(1 小时 23 分钟)现在起)。”
这是我的代码。我是否需要重新使用此功能并从本质上复制其中的大部分内容,或者是否有更清洁的方法来完成此操作?
(PS。商店营业时间是从自定义选项页面中的 ACF 日期/时间字段中提取的)
TIA
// -------------------------------------------
// STORE CLOCK
// -------------------------------------------
function store_clock() {
$weekday_open = get_field('weekday_open', 'options');
$sat_open = get_field('sat_open', 'options');
$sun_open = get_field('sun_open', 'options');
$weekday_close = get_field('weekday_close', 'options');
$sat_close = get_field('sat_close', 'options');
$sun_close = get_field('sun_close', 'options');
$store_closed = get_field('close_store', 'options');
$store_times = array(
array( //Sunday
'open' => $sun_open,
'close' => $sun_close,
),
array( //Monday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Tuesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Wednesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Thursday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Friday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Saturday
'open' => $sat_open,
'close' => $sat_close,
),
);
$current_day = date( 'w', current_time('timestamp') ); //Numeric representation of the day (0 for Sunday, 6 for Saturday)
$current_date = date( 'd F Y', current_time('timestamp') );
if ( $store_times[$current_day] !== false && $store_closed !== true ) {
$opening_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['open'] ) );
$closing_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['close'] ) );
if ( $closing_time - current_time('timestamp') > 0 && $closing_time - current_time('timestamp') < 1800 ) {
return 'last_call';
} elseif ( $opening_time > current_time('timestamp') || $closing_time < current_time('timestamp') ) {
return 'closed';
} else {
return 'open';
}
} else {
return 'closed';
}
}
解决方案
我建议重用这段代码来返回一个数组,同时返回当前状态和未来几天的状态。您可能还需要考虑下一次开放的日期以延长关闭时间,
// -------------------------------------------
// STORE CLOCK
// -------------------------------------------
function store_clock() {
$weekday_open = get_field('weekday_open', 'options');
$sat_open = get_field('sat_open', 'options');
$sun_open = get_field('sun_open', 'options');
$weekday_close = get_field('weekday_close', 'options');
$sat_close = get_field('sat_close', 'options');
$sun_close = get_field('sun_close', 'options');
$store_closed = get_field('close_store', 'options');
$store_times = array(
array( //Sunday
'open' => $sun_open,
'close' => $sun_close,
),
array( //Monday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Tuesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Wednesday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Thursday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Friday
'open' => $weekday_open,
'close' => $weekday_close,
),
array( //Saturday
'open' => $sat_open,
'close' => $sat_close,
),
);
$current_day = date( 'w', current_time('timestamp') ); //Numeric representation of the day (0 for Sunday, 6 for Saturday)
$current_date = date( 'd F Y', current_time('timestamp') );
if ( $store_times[$current_day] !== false && $store_closed !== true ) {
$opening_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['open'] ) );
$closing_time = strtotime( sprintf( '%s %s', $current_date, $store_times[$current_day]['close'] ) );
if ( $closing_time - current_time('timestamp') > 0 && $closing_time - current_time('timestamp') < 1800 ) {
return array('last_call', null);
} elseif ( $opening_time > current_time('timestamp') || $closing_time < current_time('timestamp') ) {
return array('closed', (isset($store_times[$current_day + 1]) ? $store_times[$current_day + 1]['open'] : $store_times[0]['open']));
} else {
return array('open', null);
}
} else {
return array('closed', (isset($store_times[$current_day + 1]) ? $store_times[$current_day + 1]['open'] : $store_times[0]['open']));
}
}
推荐阅读
- homebrew - Brew 更新工作后 Mac Mojave 10.14.2 上的 Brew 升级失败
- c# - 按下按钮后将文本放入固定宽度的列
- javascript - Nodemailer 在特定日期之后发送电子邮件?
- angular - Angular img 无法从 url 加载图像
- apache - WAMP 自定义 url 在主机上工作但在其他机器上不工作
- java - 交换矩阵的两列
- c# - 如何在 asp.net 自托管 API 中启用 CORS?
- hyperledger-sawtooth - 如何获取属于一个状态的所有交易?
- java - 将数组中对象的值相加
- python-3.x - 如何自定义 AWS Codestar / Cloudformation 模板来创建特定的代码构建项目?