我发现 DatePicker 中的默认设置不会考虑儒略日期(即 1582 年之前的欧洲日期),但还没有找到解决此问题的正确方法。有什么建议吗?
问问题
458 次
2 回答
0
因此,到目前为止,DataPicker 无法考虑除公历之外的任何其他日历。只是为了记录,我正在使用 Keith Wood 的世界日历日期选择器发布我的解决方案:
1)创建web/calendars/
并解压缩日历包到其中。
2) 将资产包创建CalendarAsset.php
到assets
文件夹中(我选择 Julian/Gregorian(默认)日历和英语/西班牙语本地化;您可能需要从其他语言和日历中进行选择):
<?php
namespace app\assets;
use yii\web\AssetBundle;
class CalendarAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'calendars/humanity.calendars.picker.css',
];
public $js = [
'calendars/jquery.min.js',
'calendars/jquery.calendars.js',
'calendars/jquery.calendars.plus.js',
'calendars/jquery.plugin.js',
'calendars/jquery.calendars.picker.js',
'calendars/jquery.calendars.julian.js',
'calendars/jquery.calendars.picker-es.js',
'calendars/jquery.calendars-es.js',
];
public $jsOptions = [
'position' => \yii\web\View::POS_HEAD,
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
?>
3) 然后我添加web/calendars/jquery.mycalendar.calendars.js
了一些默认设置、日历选择器和完全从 Keith Wood 的演示中提取的通用实现:
$.calendarsPicker.setDefaults({
dateFormat: 'yyyy-mm-dd',
defaultDate: '1478-06-24',
yearRange: 'c-120:c+120',
});
$('#selectCalendar').change(function() {
var calendar = $.calendars.instance($(this).val(), 'es');
var convert = function(value) {
return (!value || typeof value != 'object' ? value :
calendar.fromJD(value.toJD()));
};
$('.is-calendarsPicker').each(function() {
var current = $(this).calendarsPicker('option');
$(this).calendarsPicker('option', {calendar: calendar,
onSelect: null, onChangeMonthYear: null,
defaultDate: convert(current.defaultDate),
minDate: convert(current.minDate),
maxDate: convert(current.maxDate),
}).
calendarsPicker('option', {
onSelect: current.onSelect,
onChangeMonthYear: current.onChangeMonthYear
});
});
});
4)最后我把这一切都_form.php
看在眼里:
<?php
use app\assets\CalendarAsset;
use yii\helpers\Html;
use yii\widgets\ActiveForm;
// Load Keith Wood's JQuery stuff selected in CalendarAsset.php.
CalendarAsset::register($this);
// Load my calendar defaults and implementation.
$this->registerJsFile('calendars/jquery.mycalendar.calendars.js');
// Link one calendar instantiation to id = "popupDatepicker" with Julian and spanish as defaults.
$this->registerJs("$('#popupDatepicker').calendarsPicker({calendar: $.calendars.instance('julian', 'es')});");
?>
...........
<?php $form = ActiveForm::begin(); ?>
<?= Html::label(Yii::t('app', 'Calendario'), 'selectCalendar', ['class' => 'control-label']) ?>
<div class="form-group">
<?= Html::dropDownList(null, null, [
'julian' => Yii::t('app', 'Calendario juliano'),
'gregorian' => Yii::t('app', 'Calendario Gregoriano'),
], ['id' => 'selectCalendar', 'class' => 'form-control']) ?>
</div>
<?= $form->field($model, 'fecha')->textInput(['id' => 'popupDatepicker', 'placeholder' => Yii::t('app', 'aaaa-mm-dd')]); ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Crear') : Yii::t('app', 'Actualizar'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
希望它可能对某人有用。
于 2015-03-10T11:48:22.027 回答
0
我可能会为 jQuery 实现Keith Woods Calendar。使用默认日期选择器进行编码可能不如默认日期选择器友好,但将其分配给 a$form->textInput()
应该足够简单。
于 2015-03-06T17:45:31.677 回答