Поддерживает ли yii\jui\DatePicker даты по юлианскому календарю?

Я обнаружил, что настройки по умолчанию в DatePicker не будут учитывать юлианские даты (т.е. европейские даты до 1582 года), но не нашел правильного способа решить эту проблему. Любое предложение?


person Antonio López    schedule 06.03.2015    source источник


Ответы (2)


Я бы, вероятно, реализовал Календарь Кейта Вудса для jQuery. Это может быть не так удобно для кода, как средство выбора даты по умолчанию, но назначение его $form->textInput() должно быть достаточно простым.

person tripskeet    schedule 06.03.2015
comment
Итак, следуя вашему совету, я загрузил пакет jquery.calendars, и теперь я должен разархивировать его и зарегистрировать как пакет активов? Просто чтобы быть уверенным, поскольку я никогда не делал этого раньше. - person Antonio López; 07.03.2015

Таким образом, сейчас DataPicker не может учитывать какой-либо другой календарь, кроме григорианского. Просто для протокола, я публикую свое решение, используя средство выбора даты мирового календаря Кейта Вуда:

1) Создал web/calendars/ и разархивировал в него пакет календарей.

2) Создал пакет ресурсов CalendarAsset.php в папке assets (я выбрал юлианский/григорианский (по умолчанию) календари и английскую/испанскую локализацию; вы можете выбрать другие языки и календари):

<?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, чтобы включить некоторые настройки по умолчанию, селектор календаря и общую реализацию, полностью скопированную из демонстраций Кита Вуда:

$.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(); ?>

Hope it may be useful to someone.

person Antonio López    schedule 10.03.2015