我正在制作拍卖应用程序,人们可以在不同地点的特定日期时间创建他们的拍摄。
我想向匹配的用户发送此次竞价的通知,但它无效。 请看看下面的cron将会每分钟运行一次。
对于exp:我已经创建了一个拍卖,它将在拍卖开始之前开始2017-09-06 10:05
我想在2017-09-06 10:04
向匹配的用户发送通知但是它不起作用。
我检查过并发现我的拍卖时间与服务器时间有冲突。有没有办法解决它。
我根据用户位置设置时区
public function actionCron()
{
$currentTime = time();
$currentTimeFuture =$currentTime+90;
$tableName = \backend\models\Delivery::tableName();
$sql = "select id,user_id,auction_start_time from $tableName where status=1 and is_delete=0 and delivery_status=0 and auction_start_time between $currentTime and $currentTimeFuture";
$data = Yii::$app->getDb()->createCommand($sql)->queryAll();
foreach($data as $_dilevery){
// notification code here
}
}
答案 0 :(得分:1)
棘手的问题是尝试管理不同时区的不同流程。为简单起见,强烈建议您以UTC格式存储所有日期/时间,并且服务器也以UTC格式运行。这样可以轻松进行日期比较,您无需担心夏令时等棘手的事情。
为了使用户更加友好,您应该询问用户当用户注册您的应用程序时他们所在的时区。您可以存储此时区,然后使用它来简单地格式化应用程序中的所有日期/时间,以便用户更轻松。
以下是一个获取UTC日期/时间并轻松更改不同时区的示例:https://eval.in/855883
// Store date/time as UTC
$database_datetime = '2017-09-05 22:00:00';
// Create a date/time object - TimeZone is UTC
$dt = new DateTime($database_datetime, new DateTimeZone('UTC'));
echo $dt->format('Y-m-d H:i:s'); echo "\n\n";
// Now change to user local date/time based on user timezone
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('Y-m-d H:i:s'); echo "\n\n";
$dt->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dt->format('Y-m-d H:i:s'); echo "\n\n";
在此处详细了解PHP的DateTime
:http://php.net/manual/en/class.datetime.php
答案 1 :(得分:1)
'formatter' => [
'class'=>\common\components\Formatter::className(),
'defaultTimeZone' => 'UTC',
'timeZone' => 'UTC',
],
在common \ components
中创建Formatter类in controler
public function beforeAction($action)
{$this->setTimeZone();
}
public function setTimeZone()
{
if (!Yii::$app->user->isGuest) {
$timezone = Yii::$app->user->identity->timezone;
if ($timezone && $timezone != Yii::$app->components['formatter']) {
$formatter = Yii::$app->components['formatter'];
$formatter['timeZone'] = $timezone;
Yii::$app->setComponents(['formatter' => $formatter]);
}
}
return true;
}
答案 2 :(得分:0)
$ php -i |grep php\.ini
找到CLI版本的php.ini
文件并选择您的默认时区。