我正在创建拍卖应用程序,人们可以在给定的日期时间从不同的位置创建拍卖。
我想向此次拍卖的匹配用户发送通知,但它不起作用。 请查看下面的 cron,它将每分钟运行一次。
例如:我已经创建了一个拍卖,将于 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
}
}
最佳答案
棘手的问题是尝试管理不同时区的不同进程。为了简单起见,强烈建议您将所有日期/时间存储在 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
关于php - cron 中的时区问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056496/