Unable to convert date to particular format in Swift - ios

I am getting some date string from server, like "2021-06-25"
If it is today date or yesterday date, I have to show like Today or Yesterday.
Else I have to show 25 June 2021
For Today and Yesterday date its working fine.
But, If its other day, it is showing 25 Jun 2021
How to show 21 June 2021
static func getDay(_ nowDay: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let journalDate = dateFormatter.date(from: nowDay)
if let convertedDate = journalDate {
let relativeDateFormatter = DateFormatter()
relativeDateFormatter.timeStyle = .none
relativeDateFormatter.dateStyle = .medium
relativeDateFormatter.locale = Locale(identifier: "en_GB")
relativeDateFormatter.doesRelativeDateFormatting = true
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"
return relativeDateFormatter.string(from: convertedDate)
}
return ""
}
Any suggestions?

If you want the full name of the month, use .long rather than .medium as the date style:
relativeDateFormatter.dateStyle = .long
Also note that you can use a ISO8601DateFormatter to parse nowDay, since it is in ISO-8601 format:
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [.withFullDate]
let journalDate = dateFormatter.date(from: nowDay)

Related

Convert UTC date to local date swift4

All,
I am trying to convert UTC date to local date . Below is my code. But, even after converting I get both dates in UTC only.
static func getTodayDateInLocalTimeZone() -> Date{
let todaydateInUTC = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.timeZone = TimeZone(identifier: "UTC")
let utcDateString = dateFormatter.string(from: todaydateInUTC)
print("Date::: utcDateString: \(utcDateString)")
// Changing to Current timezone
let timzoneIdentiier = TimeZone.current.identifier
let timezone = TimeZone(identifier: timzoneIdentiier)
let abbrv = timezone?.abbreviation()
let dateFormatter1 = DateFormatter()
dateFormatter1.timeZone = TimeZone(identifier: abbrv!)
dateFormatter1.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
print("Date:::timeZone: \(timzoneIdentiier) == \(String(describing: abbrv))")
let formattedDate1 = dateFormatter1.date(from: utcDateString)
print("Date:::: \(formattedDate1)")
return formattedDate1!
}
Here is what I get when I print
Date::: utcDateString: 2021-01-20T17:39:15+0000
Date:::timeZone: America/New_York == Optional("EST")
Date:::: Optional(2021-01-20 17:39:15 +0000)
Please let me know why is it now changing to the local timezone.
Thanks
First of all, a date does not have a time zone.
So let todaydateInUTC = Date() actually means let todaydate = Date().
The time zone becomes relevant, when you want to present a date to the user.
So instead of creating a new date from a the utcDateString, you just need to create another date string from the same date variable.
let formattedDate1 = dateFormatter1.date(from: utcDateString) becomes let tzDateString = dateFormatter1.string(from: todaydate).
This also means your function should return a string instead of a date.
For example:
func getTodayDateInLocalTimeZone() -> String
{
let now = Date()
// Just for debugging. Not for the result.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.timeZone = TimeZone(identifier: "UTC")
let utcDateString = dateFormatter.string(from: now)
print("Date::: utcDateString: \(utcDateString)")
let tz = TimeZone.current
let dateFormatter1 = DateFormatter()
dateFormatter1.timeZone = tz
dateFormatter1.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
print("Date:::timeZone: \(tz) == \(String(describing: tz.abbreviation()))")
let tzDateString = dateFormatter1.string(from: now)
print("Date:::: \(tzDateString)")
return tzDateString
}
For me it results in:
Date::: utcDateString: 2021-01-20T18:19:44+0000
Date:::timeZone: Europe/Berlin (current) == Optional("CET")
Date:::: 2021-01-20T19:19:44+0100

Date format in Swift TODAY TOMORROW YESTERDAY

I want to show a date as Saturday June 13.
If the date is current day it should display Today like that Tomorrow, Yesterday.
I couldn't achieve both
guard let date = Date(fromString: "16 September 2020",
format: "dd MMMM yyyy") else { return nil }
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.doesRelativeDateFormatting = true
header.titleLabel.text = dateFormatter.string(from: date)
For the above code I can show date as Today Tomorrow Yesterday but other dates are not showing Saturday June 13. I tried to apply date format dateFormatter.dateFormat = "EEEE, MMM d" for the same dateFormatter it returned nothing.
The DateFormatter doesn't behave well when setting doesRelativeDateFormatting = true and trying to apply a custom format at the same time. So the easiest solution is to use the format given by a Style and a Locale
let relativeDateFormatter = DateFormatter()
relativeDateFormatter.timeStyle = .none
relativeDateFormatter.dateStyle = .medium
relativeDateFormatter.locale = Locale(identifier: "en_GB")
relativeDateFormatter.doesRelativeDateFormatting = true
Example
let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"
let dates = ["2020-09-01", "2020-09-15", "2020-09-16", "2020-09-30"].compactMap { inputFormatter.date(from: $0)}
for date in dates {
print(relativeDateFormatter.string(from: date))
}
1 Sep 2020
Yesterday
Today
30 Sep 2020
Now if you want to apply a custom format I have not found a solution for this when using the same DateFormatter instance so we need to create a new one for the custom format and use it together with a check so we apply the custom format only when it is not Today etc
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMM dd"
for date in dates {
let string = relativeDateFormatter.string(from: date)
if let _ = string.rangeOfCharacter(from: .decimalDigits) {
print(dateFormatter.string(from: date))
} else {
print(string)
}
}
Tuesday, Sep 01
Yesterday
Today
Wednesday, Sep 30
You can also use RelativeDateFormatter. Here is an example:
let date = Date().addingTimeInterval(-4 * 24 * 60 * 60)
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full
let relativeDate = formatter.localizedString(for: date, relativeTo: Date())
print(relativeDate) // 4 days ago

Swift - iOS UTC date and time set with the device date and time format with offset

I am new to iOS.
I am getting time in UTC YYYY-mm-dd H:i:s format. I want to format and offset the date and time according to the device region.
Code
let utcdatestring = cat.created
let localdate = Validator.UTCToLocal(date: utcdatestring, fromFormat: "yyyy-MM-dd HH:mm:ss", toFormat: Constants.dateformat)
let localtime = Validator.UTCToLocal(date: utcdatestring, fromFormat: "yyyy-MM-dd HH:mm:ss", toFormat: Validator.gettimeformat())
let locale = Locale.current.identifier
let formater = DateFormatter()
formater.dateFormat = "dd-MMM-yyyy"
formater.locale = Locale(identifier: locale)
let showdate = formater.date(from: localdate)
let tformater = DateFormatter()
tformater.dateFormat = "hh:mm"
tformater.locale = Locale(identifier: locale)
let showtime = tformater.date(from: localtime)
I found some way on apple documentation but not sure how to implement in my code.
Reference
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
let date = Date(timeIntervalSinceReferenceDate: 118800)
// US English Locale (en_US)
dateFormatter.locale = Locale(identifier: "en_US")
print(dateFormatter.string(from: date)) // Jan 2, 2001
// French Locale (fr_FR)
dateFormatter.locale = Locale(identifier: "fr_FR")
print(dateFormatter.string(from: date)) // 2 janv. 2001
// Japanese Locale (ja_JP)
dateFormatter.locale = Locale(identifier: "ja_JP")
print(dateFormatter.string(from: date)) // 2001/01/02
Question:
How can I convert UTC date and time to the device date and time format with offset
let utcdatestring = cat.created
let localdate = Validator.UTCToLocal(date: utcdatestring, fromFormat: "yyyy-MM-dd HH:mm:ss", toFormat: Constants.dateformat)
let localtime = Validator.UTCToLocal(date: utcdatestring, fromFormat: "yyyy-MM-dd HH:mm:ss", toFormat: Validator.gettimeformat())
let formater = DateFormatter()
formater.dateFormat = "dd-MMM-yyyy"
let showdate = formater.date(from: localdate)
let tformater = DateFormatter()
tformater.dateFormat = "hh:mm"
let showtime = tformater.date(from: localtime)
try like this. the locale will be set automatially i guess

how to get the date only in iOS not time

I want to get the only date in iOS and not time
my code is
extension Date{
var DateInDate: Date{
let formatter = DateFormatter()
formatter.setLocalizedDateFormatFromTemplate("yyyy-MM-dd")
formatter.locale = Locale(identifier: "en_IN")
let dateInString = formatter.string(from: self)
return formatter.date(from: dateInString)!
}
}
if I am doing by the above format I am getting the answer as "Apr 3, 2019 at 12: 00 AM"
my other code is
extension Date{
var DateInDate: String{
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .none
formatter.setLocalizedDateFormatFromTemplate("yyyy-MM-dd")
formatter.locale = Locale(identifier: "en_IN")
let dateInString = formatter.string(from: self)
}
}
but in this way, I am getting in string format and not a Date format
I want the answer in date format
As mentioned in the comments a Date instance without the time portion is impossible.
In terms of Date a timeless date is midnight, the start of the day.
There is an convenience API in Calendar:
let startOfDay = Calendar.current.startOfDay(for: Date())
You should use DateComponents instead. Date would always have the time.
Try this:
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = DateFormatter.Style.none
dateFormatter.dateStyle = DateFormatter.Style.short
dateFormatter.string(from: date)

Date Format in Swift

How will I convert this datetime from the date?
From this: 2016-02-29 12:24:26
to: Feb 29, 2016
So far, this is my code and it returns a nil value:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date: NSDate? = dateFormatter.dateFromString("2016-02-29 12:24:26")
print(date)
This may be useful for who want to use dateformatter.dateformat;
if you want 12.09.18 you use dateformatter.dateformat = "dd.MM.yy"
Wednesday, Sep 12, 2018 --> EEEE, MMM d, yyyy
09/12/2018 --> MM/dd/yyyy
09-12-2018 14:11 --> MM-dd-yyyy HH:mm
Sep 12, 2:11 PM --> MMM d, h:mm a
September 2018 --> MMMM yyyy
Sep 12, 2018 --> MMM d, yyyy
Wed, 12 Sep 2018 14:11:54 +0000 --> E, d MMM yyyy HH:mm:ss Z
2018-09-12T14:11:54+0000 --> yyyy-MM-dd'T'HH:mm:ssZ
12.09.18 --> dd.MM.yy
10:41:02.112 --> HH:mm:ss.SSS
Here are alternatives:
Era: G (AD), GGGG (Anno Domini)
Year: y (2018), yy (18), yyyy (2018)
Month: M, MM, MMM, MMMM, MMMMM
Day of month: d, dd
Day name of week: E, EEEE, EEEEE, EEEEEE
You have to declare 2 different NSDateFormatters, the first to convert the string to a NSDate and the second to print the date in your format.
Try this code:
let dateFormatterGet = NSDateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateFormatterPrint = NSDateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"
let date: NSDate? = dateFormatterGet.dateFromString("2016-02-29 12:24:26")
print(dateFormatterPrint.stringFromDate(date!))
Swift 3 and higher:
From Swift 3 NSDate class has been changed to Date and NSDateFormatter to DateFormatter.
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"
if let date = dateFormatterGet.date(from: "2016-02-29 12:24:26") {
print(dateFormatterPrint.string(from: date))
} else {
print("There was an error decoding the string")
}
Swift - 5.0
let date = Date()
let format = date.getFormattedDate(format: "yyyy-MM-dd HH:mm:ss") // Set output format
extension Date {
func getFormattedDate(format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: self)
}
}
Swift - 4.0
2018-02-01T19:10:04+00:00 Convert Feb 01,2018
extension Date {
static func getFormattedDate(string: String , formatter:String) -> String{
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"
let date: Date? = dateFormatterGet.date(from: "2018-02-01T19:10:04+00:00")
print("Date",dateFormatterPrint.string(from: date!)) // Feb 01,2018
return dateFormatterPrint.string(from: date!);
}
}
Swift 3 and higher
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
dateFormatter.locale = Locale.current
print(dateFormatter.string(from: date)) // Jan 2, 2001
This is also helpful when you want to localize your App. The Locale(identifier: ) uses the ISO 639-1 Code.
See also the Apple Documentation
Swift 3 version with the new Date object instead NSDate:
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd,yyyy"
let date: Date? = dateFormatterGet.date(from: "2017-02-14 17:24:26")
print(dateFormatter.string(from: date!))
EDIT: after mitul-nakum suggestion
Convert #BatyrCan answer to Swift 5.3 with extra formats. Tested in Xcode 12.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
var dateFromStr = dateFormatter.date(from: "12:16:45")!
dateFormatter.dateFormat = "hh:mm:ss a 'on' MMMM dd, yyyy"
//Output: 12:16:45 PM on January 01, 2000
dateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
//Output: Sat, 1 Jan 2000 12:16:45 +0600
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
//Output: 2000-01-01T12:16:45+0600
dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
//Output: Saturday, Jan 1, 2000
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
//Output: 01-01-2000 12:16
dateFormatter.dateFormat = "MMM d, h:mm a"
//Output: Jan 1, 12:16 PM
dateFormatter.dateFormat = "HH:mm:ss.SSS"
//Output: 12:16:45.000
dateFormatter.dateFormat = "MMM d, yyyy"
//Output: Jan 1, 2000
dateFormatter.dateFormat = "MM/dd/yyyy"
//Output: 01/01/2000
dateFormatter.dateFormat = "hh:mm:ss a"
//Output: 12:16:45 PM
dateFormatter.dateFormat = "MMMM yyyy"
//Output: January 2000
dateFormatter.dateFormat = "dd.MM.yy"
//Output: 01.01.00
//Customisable AP/PM symbols
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "Pm"
dateFormatter.dateFormat = "a"
//Output: Pm
// Usage
var timeFromDate = dateFormatter.string(from: dateFromStr)
print(timeFromDate)
swift 3
let date : Date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy"
let todaysDate = dateFormatter.string(from: date)
I solved my problem to the format yyyy-MM-dd'T'HH:mm:ss.SSS'Z'(e.g 2018-06-15T00:00:00.000Z) with this:
func formatDate(date: String) -> String {
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
// dateFormatter.locale = Locale(identifier: "en_US") //uncomment if you don't want to get the system default format.
let dateObj: Date? = dateFormatterGet.date(from: date)
return dateFormatter.string(from: dateObj!)
}
iOS 15.0+
iPadOS 15.0+,
macOS 12.0+,
Mac Catalyst 15.0+,
tvOS 15.0+,
watchOS 8.0+,
Xcode 13.0+
Use formatted(date:time:)
let now = Date.now
let date = now.formatted(date: .abbreviated, time: .omitted)
Instead of .abbreviated, you may use another DateStyle such as .long, .numeric or define a custom format.
SwiftUI
Text(myDate, format: Date.FormatStyle(date: .numeric, time: .omitted))
or simply use:
Text(myDate, style: .date)
Reference
formatted(date:time:)
init(_:format:)
Text.DateStyle
Swift 4, 4.2 and 5
func getFormattedDate(date: Date, format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: date)
}
let formatingDate = getFormattedDate(date: Date(), format: "dd-MMM-yyyy")
print(formatingDate)
Swift Version: 5.6 + Above
DateFormatter’s dateFormatter property is used to format Date with a custom String Pattern.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy"
let date = dateFormatter.string(from: datePicker.date)
print(date)
//Feb 28, 2022
If you want anything that shouldn’t be formatted and printed, then use single quotes around that word. Like; ‘at’
dateFormatter.dateFormat = "MMM dd, yyyy 'at' hh:MM a"
// May 29, 2022 at 12:05 PM
These are all possible Patterns to Format Date, Time & Time Zone.
Swift 3 with a Date extension
extension Date {
func string(with format: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: self)
}
}
Then you can use it like so:
let date = Date()
date.string(with: "MMM dd, yyyy")
If you want to parse date from "1996-12-19T16:39:57-08:00", use the following format "yyyy-MM-dd'T'HH:mm:ssZZZZZ":
let RFC3339DateFormatter = DateFormatter()
RFC3339DateFormatter.locale = Locale(identifier: "en_US_POSIX")
RFC3339DateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
RFC3339DateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
/* 39 minutes and 57 seconds after the 16th hour of December 19th, 1996 with an offset of -08:00 from UTC (Pacific Standard Time) */
let string = "1996-12-19T16:39:57-08:00"
let date = RFC3339DateFormatter.date(from: string)
from Apple https://developer.apple.com/documentation/foundation/dateformatter
Another interessant possibility of format date. This screenshot belongs to Apple's App "News".
Here is the code:
let dateFormat1 = DateFormatter()
dateFormat1.dateFormat = "EEEE"
let stringDay = dateFormat1.string(from: Date())
let dateFormat2 = DateFormatter()
dateFormat2.dateFormat = "MMMM"
let stringMonth = dateFormat2.string(from: Date())
let dateFormat3 = DateFormatter()
dateFormat3.dateFormat = "dd"
let numDay = dateFormat3.string(from: Date())
let stringDate = String(format: "%#\n%# %#", stringDay.uppercased(), stringMonth.uppercased(), numDay)
Nothing to add to alternative proposed by lorenzoliveto. It's just perfect.
let dateFormat = DateFormatter()
dateFormat.dateFormat = "EEEE\nMMMM dd"
let stringDate = dateFormat.string(from: Date()).uppercased()
import UIKit
// Example iso date time
let isoDateArray = [
"2020-03-18T07:32:39.88Z",
"2020-03-18T07:32:39Z",
"2020-03-18T07:32:39.8Z",
"2020-03-18T07:32:39.88Z",
"2020-03-18T07:32:39.8834Z"
]
let dateFormatterGetWithMs = DateFormatter()
let dateFormatterGetNoMs = DateFormatter()
// Formater with and without millisecond
dateFormatterGetWithMs.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
dateFormatterGetNoMs.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd,yyyy"
for dateString in isoDateArray {
var date: Date? = dateFormatterGetWithMs.date(from: dateString)
if (date == nil){
date = dateFormatterGetNoMs.date(from: dateString)
}
print("===========>",date!)
}
just use below function to convert date format:-
let convertedFormat = convertToString(dateString: "2019-02-12 11:23:12", formatIn: "yyyy-MM-dd hh:mm:ss", formatOut: "MMM dd, yyyy") //calling function
print(convertedFormat) // feb 12 2019
func convertToString (dateString: String, formatIn : String, formatOut : String) -> String {
let dateFormater = DateFormatter()
dateFormater.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
dateFormater.dateFormat = formatIn
let date = dateFormater.date(from: dateString)
dateFormater.timeZone = NSTimeZone.system
dateFormater.dateFormat = formatOut
let timeStr = dateFormater.string(from: date!)
return timeStr
}
To convert 2016-02-29 12:24:26 into a date, use this date formatter:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
Edit: To get the output Feb 29, 2016 use this date formatter:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MMM dd, yyyy"
For Swift 4.2, 5
Pass date and format as whatever way you want.
To choose format you can visit, NSDATEFORMATTER website:
static func dateFormatter(date: Date,dateFormat:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
return dateFormatter.string(from: date)
}
Place it in extension and call it like below. It's easy to use throughout the application.
self.getFormattedDate(strDate: "20-March-2019", currentFomat: "dd-MMM-yyyy", expectedFromat: "yyyy-MM-dd")
Implementation
func getFormattedDate(strDate: String , currentFomat:String, expectedFromat: String) -> String{
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = currentFomat
let date : Date = dateFormatterGet.date(from: strDate) ?? Date()
dateFormatterGet.dateFormat = expectedFromat
return dateFormatterGet.string(from: date)
}
From iOS 15 use something like this:
extension Date {
var string: String {
if #available(iOS 15.0, *) {
return self.formatted(date: .complete, time: .complete)
} else {
return self.description
}
}
}
Here is a full date format extension for swift
extension Date {
func getFormattedDate(format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: self)
}
func getFormattedDate(style: DateFormatter.Style) -> String {
let dateformat = DateFormatter()
dateformat.dateStyle = style
return dateformat.string(from: self)
}
}
Usage
myDate.getFormattedDate(style: .medium) //medium, short, full, long
OR
myDate.getFormattedDate(format: "yyyy/MM/dd HH:mm:ss")
swift 3
func dataFormat(dataJ: Double) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
dateFormatter.timeStyle = .none
let date = Date(timeIntervalSince1970: dataJ)
return (dataJ != nil) ? "Today, \(dateFormatter.string(from: date))" : "Date Invalid"
}
I recommend to add timezone by default. I will show an example for swift 5
1. new an extension file Date+Formatter.swift
import Foundation
extension Date {
func getFormattedDateString(format: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
dateFormatter.timeZone = TimeZone.current
return dateFormatter.string(from: self)
}
}
Usage example
let date = Date()
let dateString = date.getFormattedDateString(format: "yyyy-MM-dd HH:mm:ss")
print("dateString > \(dateString)")
// print
// dateString > 2020-04-30 15:15:21
class Utils {
class func dateFormatter(_ date: Date, _ format: String) -> String {
let dateformat = DateFormatter()
dateformat.dateFormat = format
return dateformat.string(from: date)
}
}
print(Utils.dateFormatter(Date(), "EEEE, MMM d, yyyy"))
Create class name Utils import same function and you can use globally accesss any where with your date and formate

Resources