3

我想将 jalali 转换为 gregorian。输入取自 jalali 日期视图:

<?= $form->field($model, 'start_date')->widget(jDate\DatePicker::className())->textInput() ?>

控制器

 $jstartdate = $model->start_date; // string(10) "1395/06/15" 

现在我想以公历格式(“2016-09-05”)存储在数据库中。jalali 类中的哪个函数起作用?我使用了许多功能,例如createFromFormattoGregorian. 但我没有得到结果。

4

2 回答 2

4

从 Yii 2.0.7 开始:

Yii::$app->formatter->locale = 'fa_IR@calendar=persian';
Yii::$app->formatter->calendar = \IntlDateFormatter::TRADITIONAL;
Yii::$app->formatter->timeZone = 'UTC';
$value = 1451606400; // Fri, 01 Jan 2016 00:00:00 (UTC)
echo Yii::$app->formatter->asDate($value, 'php:Y');
// outputs "۱۳۹۴"
于 2016-10-02T07:14:11.647 回答
4

为简单起见,您必须intl在服务器上安装扩展,并且您的 php 版本必须高于5.4. 如果是,您可以轻松地IntlCalendar使用波斯日历参数创建一个实例:

$date = IntlCalendar::createInstance(
    'Asia/Tehran',
    'fa_IR@calendar=persian'
);

设置您的日期时间:

$date->set(1395, 5, 15, 19, 17, 11); // Notice that month number begin from 0 not 1.

IntlDateFormatter然后使用公历创建一个实例 - 或您想要的每个日历:

$intlDateFormatter = new IntlDateFormatter(
    "en_US", // string $locale
    IntlDateFormatter::FULL, // int $datetype
    IntlDateFormatter::FULL, // int $timetype
    'Asia/Tehran', // mixed $timezone
    IntlDateFormatter::GREGORIAN, // mixed $calendar
    'yyyy/MM/dd HH:mm:ss' // string $pattern
);

并使用toDateTime该方法显示您想要的日期:

var_dump($intlDateFormatter->format($date));
// /srv/http/test/DateTime.php:29:
// string(19) "2016/09/05 19:17:11"

PS:我写了一个转换日期的小库,可以在这里找到:https ://github.com/meysampg/intldate ,另外如果你只想在其他系统上表示日期,你可以使用IntlDateBehavior

于 2016-09-05T14:58:06.403 回答