Преобразование строки в дату возвращает nil swift 4? [Дубликат]

$name = $_POST['name'];
$email = $_POST['email'];
$reciver = '/* Reciver Email address */';
if (filter_var($reciver, FILTER_VALIDATE_EMAIL)) {
    $subject = $name;
    // To send HTML mail, the Content-type header must be set.
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers .= 'From:' . $email. "\r\n"; // Sender's Email
    //$headers .= 'Cc:' . $email. "\r\n"; // Carbon copy to Sender
    $template = '<div style="padding:50px; color:white;">Hello ,<br/>'
        . '<br/><br/>'
        . 'Name:' .$name.'<br/>'
        . 'Email:' .$email.'<br/>'
        . '<br/>'
        . '</div>';
    $sendmessage = "<div style=\"background-color:#7E7E7E; color:white;\">" . $template . "</div>";
    // Message lines should not exceed 70 characters (PHP rule), so wrap it.
    $sendmessage = wordwrap($sendmessage, 70);
    // Send mail by PHP Mail Function.
    mail($reciver, $subject, $sendmessage, $headers);
    echo "Your Query has been received, We will contact you soon.";
} else {
    echo "<span>* invalid email *</span>";
}
1
задан Sulthan 31 March 2016 в 12:06
поделиться

2 ответа

Я пробовал свой код, и он дает мне нуль за 2022 год, но в 2018 году 2020 года он дает Apr ... weird!

    NSString *dateString=@"2022-04-01";
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"+5:30"]];
[dateFormatter setDateFormat:@"MMM"];
NSString *stringFromDate = [dateFormatter stringFromDate:myDate];
NSLog(@"%@ == %@",dateString,stringFromDate);

UPDATE:

Пожалуйста, проанализируйте строку следующим образом: 2016-04-01 01:00

Из-за летнего времени в Иордании часы будут сдвинуты на +1 час, поэтому нет времени во вселенной, как это: 2016-04-01 00:00

Это должно разрешить проблемы с ur с объектом nil.

1
ответ дан Ahmed Awad 21 August 2018 в 09:23
поделиться
  • 1
    вы можете показать код ур – Anbu.karthik 31 March 2016 в 11:24
  • 2
    Объект myDate - это nil парни .. почему это ноль ?! – Ahmed Awad 31 March 2016 в 11:38
  • 3
    добавьте этот часовой пояс [NSTimeZone timeZoneForSecondsFromGMT:0]; в ответ на sulthan, попробуйте один раз – Anbu.karthik 31 March 2016 в 11:40
  • 4
    попробовал, не влияет ни на что, поскольку объект myDate ник по какой-то причине :( – Ahmed Awad 31 March 2016 в 11:45

Это, вероятно, проблема в вашем часовом поясе. Обратите внимание, что при анализе даты без времени предполагается, что время равно нулю. Однако некоторые конкретные времена не существуют, как правило, из-за изменения времени перехода на летнее время (которые происходят в марте по всему миру) или из-за конкретных локальных изменений времени.

Например, в Иордании изменение DST Apr 1 2016, 00:00 => Apr 1 2016, 01:00. Это означает, что время Apr 1 2016, 00:00 не существует, потому что March 31 2016, 23:59 становится немедленно Apr 1 2016, 01:00. Если дата не существует, форматировщик даты должен возвращать nil.

Обычно вы можете исправить эту проблему, используя предустановленный часовой пояс GMT, который не имеет этой проблемы, например

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

или

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:[NSTimeZone systemTimeZone].secondsFromGMT];

Обратите внимание, что поскольку вы не занимаетесь анализом времени, различия в часовых поясах не должны влиять на вас.

Шаги по воспроизведению

Установите часовой пояс на вашей машине в иорданский часовой пояс:

NSString *dateString = @"2016-04-01";
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init];
parsingFormatter.dateFormat = @"yyyy-MM-dd";

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "(null)"

с исправлением часового пояса:

NSString *dateString = @"2016-04-01";
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init];
parsingFormatter.dateFormat = @"yyyy-MM-dd";
parsingFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "2016-04-01 00:00:00 +0000"
4
ответ дан Sulthan 21 August 2018 в 09:23
поделиться
  • 1
    ни один человек, что-то не так с синтаксическим разбором, что дает объект myDate как ничто! – Ahmed Awad 31 March 2016 в 11:44
  • 2
    @AhmedAwad, и вы попробовали мой код? Обратите внимание, что перед анализом вам нужно добавить его . – Sulthan 31 March 2016 в 11:48
  • 3
    Обратите внимание, что это обычно не всегда дает ожидаемый результат, когда оба форматирования даты имеют разные часовые пояса. Это действительно не относится к NSDate, это для компонентов даты. :) – Eiko 31 March 2016 в 12:38
  • 4
    @Eiko Это правда, но если ваш ввод представляет собой строку (например, дату, поступающую с сервера), то у вас действительно нет возможности избежать NSDateFormatter, а это означает использование NSDate. Разумеется, потребуется использовать тот же часовой пояс для обоих форматировщиков. – Sulthan 31 March 2016 в 12:48
  • 5
    @Sulthan благодарю вас за разъяснение этого для меня. – Husni AbuArqoub 31 March 2016 в 12:59