сравнить время публикации с текущим временем в swift

#ios #swift #datetime

#iOS #swift #дата и время

Вопрос:

У меня есть кнопка с действием, но перед выполнением действия мне нужно проверить последнее сообщение пользователя, если оно было до 12 часов или нет, если да, я не разрешу публиковать, если да, я буду обработан для публикации

Я пытался использовать этот код, но, похоже, что-то не так! Я изменил его в api, чтобы возвращать числа, и появляется та же ошибка!

    @IBAction func SubmitAd(_ sender: Any) {
    
    //LastPost:"time": "2021-01-30 18:29:05"


    if LastPost < "12" {
        print("You Can not Post now")
    } else {
        if (TitleLBL.text!.isEmpty || MessageLBL.text!.isEmpty || PhotoArray.count==0 || sectionName.isEmpty){
            ShowFillAlert()
        }else{
            
            ShowGuideAlert()
        }
    }
}
 

ошибка заключается
в том, что двоичный оператор ‘<‘ не может быть применен к двум операндам ‘[String: String]’

мой php api

 <?php header('Access-Control-Allow-Origin: *'); ?>
<?php
require_once '../config/app.php';
require_once '../config/database.php';
$mob=$_REQUEST["mob"];


$se=array("status"=>"","data"=>array());

$userEsxist = $mysqli->query("SELECT time FROM `requests` where phone = '$mob' ORDER BY `requests`.`time` DESC
");

if(!$userEsxist->num_rows){
$se["status"]=false;

} 
else
{
    $foundUser = $userEsxist->fetch_assoc();
    $se["status"]=true;
    $se["data"]=$foundUser;
}
echo json_encode($se);
?> 

Комментарии:

1. «до 12 часов», что это значит? Менее 12 часов или до 12 часов? И какой тип LastPost?

2. @JoakimDanielson да, я имею в виду, что если пользователь опубликовал сообщение за последние 12 часов с момента его последнего сообщения, LastPost — это дата и время, и формат тоже зависит от вопроса

3. datetime не является типом swift, поэтому я снова спрашиваю, какой тип LastPost или datetime — это какой-то пользовательский тип?

4. @JoakimDanielson Последнее сообщение является строкой

Ответ №1:

Вот решение, которое я предлагаю. Сначала он преобразует строку в дату с помощью DateFormatter. Затем он добавляет 12 часов к дате. Наконец, он проверяет, является ли новая дата (где было добавлено 12 часов) больше (читается после) текущей даты.

 @IBAction func SubmitAd(_ sender: Any) {

    let dateFormatter = DateFormatter()

    // Setting date formatter to read dates like "2021-01-30 18:29:05".
    dateFormatter.dateFormat = "y-M-d HH:mm:ss"

    let postDate = dateFormatter.date(from: LastPost)!

    let calendar = Calendar.current
    // Adding 12 hours to the post date.
    let newPostAllowedDate = calendar.date(byAdding: .hour, value: 12, to: postDate)!

    //LastPost Time Format in Database: 2021-01-30 18:29:05.
    if newPostAllowedDate > Date() {
        print("You Can not Post now")
    } else {
        if (TitleLBL.text!.isEmpty || MessageLBL.text!.isEmpty || PhotoArray.count==0 || sectionName.isEmpty){
            ShowFillAlert()
        }else{

            ShowGuideAlert()
        }
    }
}
 

Комментарии:

1. Я изменил свой api, чтобы возвращать числа, но появляется та же ошибка

2. ??? Почему вы изменили его, чтобы возвращать числа? Я не просил вас ничего менять, оставьте все как раньше, и это сработает!

3. Да, это сработало, спасибо, но я тоже хочу изменить значение из api, возможно, позже я изменю его на 8 часов вместо 12 часов, поэтому @Titouan

4. @jacob вы не можете полностью изменить свой вопрос таким образом, это делает все существующие ответы и комментарии неактуальными в худшем случае и грубо по отношению к тем, кто пытался вам помочь

5. @JoakimDanielson нет, он ответил на мой вопрос, и я возвращаюсь к старому коду и вопросу, извините, парень