10 javascript php yii2
我有一个模型,我们可以在其中选择该机构一周中每一天的开放时间,例如从某某到某某Monday 12:00 AM - 11:30 PM
<?php
namespace common\models;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\db\Expression;
class WorkHours extends _source_WorkHours
{
public const WEEK_DAY_MON = 'Mon';
public const WEEK_DAY_TUE = 'Tue';
public const WEEK_DAY_WED = 'Wed';
public const WEEK_DAY_THU = 'Thu';
public const WEEK_DAY_FRI = 'Fri';
public const WEEK_DAY_SAT = 'Sat';
public const WEEK_DAY_SUN = 'Sun';
/**
* {@inheritdoc}
*/
public function behaviors(): array
{
return [
'timestamp' => [
'class' => TimestampBehavior::class,
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],
],
'value' => new Expression('NOW()'),
],
];
}
public static function weekDays(): array
{
return [
self::WEEK_DAY_MON => 'Monday',
self::WEEK_DAY_TUE => 'Tuesday',
self::WEEK_DAY_WED => 'Wednesday',
self::WEEK_DAY_THU => 'Thursday',
self::WEEK_DAY_FRI => 'Friday',
self::WEEK_DAY_SAT => 'Saturday',
self::WEEK_DAY_SUN => 'Sunday',
];
}
public static function getWeekDay(string $val): string
{
$ar = self::weekDays();
return $ar[$val] ?? $val;
}
public static function hoursList(): array
{
$list = [];
for ($i = 0; $i < 24; $i++) {
$A = 'AM';
$n = $i;
if ($i >= 12) {
$A = 'PM';
$n = $i - 12;
}
$n = $n < 10 ? '0' . $n : $n;
$_A = ($i === 12 ? 'AM' : $A);
$list[$i . '.00'] = $n . '.00 ' . ($i === 0 ? 'PM' : $_A);
$list[$i . '.30'] = $n . '.30 ' . $A;
}
return $list;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我在创建机构时使用此模型,并能够选择那里的开放时间
<div class="form-group">
<label class="control-label col-sm-3">Wokr Hours</label>
<div class="col-sm-6">
<div class="form-group">
<?php foreach (WorkHours::weekDays() as $weekDay => $day) { ?>
<div class="col-sm-2"><?= $weekDay ?></div>
<div class="col-sm-5">
<?= $form->field(
$restaurantWorkHoursForm,
RestaurantWorkHoursForm::getAttributeName($weekDay, 'open'),
['template' => '<div class="col-sm-12">{input}</div>']
)->dropDownList(WorkHours::hoursList(), ['prompt' => ''])->label(false) ?>
</div>
<div class="col-sm-5">
<?= $form->field(
$restaurantWorkHoursForm,
RestaurantWorkHoursForm::getAttributeName($weekDay, 'close'),
['template' => '<div class="col-sm-12">{input}</div>']
)->dropDownList(WorkHours::hoursList(), ['prompt' => ''])->label(false) ?></div>
<?php } ?>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我在预订机构的地方时也使用此模型,您可以选择时间,但在这里您可以选择一天中的任何时间
<a class="btn btn-fourth <?= $restaurantReservationForm->getErrors('time') ? 'btn-error' : '' ?>"
id="reservation-time" role="button" data-bs-toggle="dropdown" aria-expanded="false">
<span class="icon br-clock"></span> <span class="js-value">
<?= $restaurantReservationForm->time
? WorkHours::hoursList()[$restaurantReservationForm->time] : '-- : --' ?>
</span>
</a>
<ul class="dropdown-menu dropdown-menu-height-fixed" aria-labelledby="reservation-time">
<?php foreach (WorkHours::hoursList() as $k => $v) { ?>
<li><a class="dropdown-item <?= $restaurantReservationForm->time === $k ? 'active' : ''
?>" href="#" data-value="<?= $k ?>"><?= $v ?></a></li>
<?php } ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
现在问题是什么。我有两种形式。在一个中,指示了时间,在另一个中,应该从第一种形式中选择时间。如何将我们指定的酒店的营业时间与预订时间的选择联系起来?
假设我们有一个工作时间12:00 AM - 11:30 PM,预订中任何时间都可以,但必须只能在我们之前指定的机构的开放时间内有选择,即每天从12:00 AM到11:30 PM,依此类推,如果某一天没有在机构选择时间,那么预约也将被清空。
有没有办法通过 做到这一点json?
这当然是可以解决的,但是您需要在服务器端和客户端都处理它。服务器端的需求是确保技术高级用户不会进行恶作剧,而客户端的需求是帮助用户知道他或她可以从哪个时期选择该值。
在服务器端,您在存储方面有多种选择,但一种可行的方法(假设将来也将重复使用所选间隔)是将这个值存储到数据库中。这意味着您需要在服务器端对该值进行 CRUD,并需要一个服务于客户端请求的 API 函数,告诉用户他/她的选择是什么。在服务器端,您可以通过 via 将内容编码为 JSON json_encode,并将结果发送到客户端。
您将需要在服务器端和客户端上都有一个验证器,以便确定给定日期是否在指定的时间间隔内。
简而言之,您需要:
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |