Jtapplecalendar: Option for Persian/Jalali Calendar?

Created on 21 Oct 2016  ·  39Comments  ·  Source: patchthecode/JTAppleCalendar

I made some change in source code and It's changed to Persian calendar and Right to Left.
I just want to know is it OK if I change some code in this framework?

enhancement

Most helpful comment

Hey, so I made an update specially for you. 😎
I want you to test it to see if it works when you have the time.

Ensure you save your changes first because doing a pod install will get rid of your changes to the library.

To test the new feature, do the following:

1) Put this in your Podfile

pod 'JTAppleCalendar', :git => 'https://github.com/patchthecode/JTAppleCalendar.git'

2) Then run pod install.

To use is all you have to do is this:

calendarView.changeVisibleDirection(to: .rightToLeft)

All 39 comments

It is ok.
But I need to know the changes you have made so that it will be in future updates of this library forever.

You can do this in two ways. Pick one.

  1. You can tell me here and I will add it.
    or
  2. You can create a pull request, and I will merge it

I choose 1, because I made change static

JTAppleCalendarSwift.swift
line 177
change
from:

    var cal = Calendar(identifier: .gregorian)

to:

    var cal = Calendar(identifier: .persian)

It's Changed calendar to Persian.


To change it from LeftToRight to RightToLeft:

JTAppleCalendarSwift.swift
Add in Line 282:

    var scalingTransform : CGAffineTransform!
    scalingTransform = CGAffineTransform(scaleX: -1, y: 1);
    cv.transform = scalingTransform

and in ViewController in calendar func add this lines end of function:

    var scalingTransform : CGAffineTransform!
    scalingTransform = CGAffineTransform(scaleX: -1, y: 1);
    myCustomCell.transform = scalingTransform

I don't have any idea how you want make it dynamic and switchable.
easy way is add this post in tutorial.
Thanks :-)

Thanks for the code help. Let me think on this. If I cant do it in code, I will add your post as a tutorial. Thanks!

U welcome buddy, Thanks to your nice job. 👍

There is one thing I need to know so that you do not have errors.
Does the Persian/jalali calendar have the same in-dates/out-dates like the gregorian calendar?

If yes, then you should have no problems
If no, then I will need to do just a very small update.

I don't understand your question,
It's a screenshot of current month in Persian/Jalali calendar.
and today is 30.

screenshot of simulator 10 21 16 3 14 pm

30 = ۳۰

Ok, i cant read your calendar. But is every thing ok with it? If all is well, then great!

Also, I have found a way to add it to the code.
I will let you know shortly

Yes, I checked a year with time.ir (Persian data/time reference) calendar and It's correct.

Awesome.

owww, new issue :-/

I make an inside header but It's mirrored :D
Because of this lines:

var scalingTransform : CGAffineTransform!
scalingTransform = CGAffineTransform(scaleX: -1, y: 1);
myCustomCell.transform = scalingTransform

screen shot 2016-10-21 at 6 14 13 pm

I think I have to find another way for Right to Left

HoHaa 🗡
I found solution.
I have to add

var scalingTransform : CGAffineTransform!
scalingTransform = CGAffineTransform(scaleX: -1, y: 1);
headerCell?.transform = scalingTransform

in end of
func calendar(_ calendar: JTAppleCalendarView, willDisplaySectionHeader header: JTAppleHeaderView, range: (start: Date, end: Date), identifier: String)
delegate

too. So this cell will be mirrored and will be done :D

Hey, so I made an update specially for you. 😎
I want you to test it to see if it works when you have the time.

Ensure you save your changes first because doing a pod install will get rid of your changes to the library.

To test the new feature, do the following:

1) Put this in your Podfile

pod 'JTAppleCalendar', :git => 'https://github.com/patchthecode/JTAppleCalendar.git'

2) Then run pod install.

To use is all you have to do is this:

calendarView.changeVisibleDirection(to: .rightToLeft)

@vahids Let me know if it works.

If it works, then you can remove your code.

Yes working like charm, Great Work!
Just a question I want to put month name in header But I didn't find any method to return month or date for current month.

Thanks again. 👍

You have dates.
You are the one to come up with the names of the month.

When ever you scroll the calendar, this delegate function is called

func calendar(_ calendar: JTAppleCalendarView, didScrollToDateSegmentWith visibleDates: DateSegmentInfo)

With this function you have a variable called visibleDates
This tells you the visible dates that are on the screen. From these dates, you can know the month.
Take a look at the sample project attached to this project.
I have code in there that shows you an example of how to get the names of the month.

If you need help, then let me know.

let visibleInDates = visibleDates.inDates
let visibleOutDates = visibleDates.outDates
let visibleMonthDates = visibleDates.monthDates

I found it, but it return Gregorian dates. I know I can convert it to Persian and find the month name.
Is it right solution ?

is it returning gregorian dates even though you used .persian ?

Are you talking about the sample application?

OR

Are you talking about your app?

The thing is, I do not know any thing about Persian dates.
So you will have to help me to understand how to show a Persian date :/

I use .persian in configureCalendar > parameters > calendar

but It print gregorian date

   func calendar(_ calendar: JTAppleCalendarView, didScrollToDateSegmentWith visibleDates: DateSegmentInfo){
        print(visibleDates.monthDates)
    }

BTW, It's easy to convert with DateFormatter

ok do you know how to print a persian date?

I thought that when ever you do this -->

let aDate = Date()

I thought you only got one type of dates. I did not know there is a way to return Persian dates. If you know of a way to return Persian dates, then let me know. Or I can try researching it because I do not know how.

You right there is not any type or return Persian Date.
It should be converted to local foramt

let today = visibleDates.monthDates[1]
let persian = Calendar(identifier: .persian)
let formatter = DateFormatter()
formatter.dateStyle = DateFormatter.Style.long
formatter.calendar = persian as Calendar!
formatter.locale = NSLocale(localeIdentifier: "fa_IR") as Locale! // "fa_IR" stands for Persian "ar_??" stands for Islamic ...
formatter.dateFormat = "MMMM"
let date = formatter.string(from: today as Date)

print(date)

Cool cool. So all is well now? :D ?

Yes, Thank YOU!

awesome

hmm.. new issue 😄
when I use .rightoleft calendar will be mirrored if rotate screen.

xD ... i didnt think about that
i will look into it

Yes it is ok to change to code in the framework.
But I need to know what change you made In order to include your changes in
version 6.0.1

If I do not know your code change, then future versions will not have your
code change.
That I why I wanted you to open a request on that link.
Are you able to open a new request?

On Fri, Oct 21, 2016 at 5:15 AM, Vahid [email protected] wrote:

I made some change in source code and It's changed to Persian calendar and
Right to Left.
I just want to know is it OK if I change some code in this framework?


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/patchthecode/JTAppleCalendar/issues/173, or mute the
thread
https://github.com/notifications/unsubscribe-auth/ACU36goGB1mRGycZXyG1ETtVAtvQPIcsks5q2KzqgaJpZM4KdKqd
.

@vahids I just made a change. Let me know if orientation bug is now resolved.
I have put the changes on master branch.

I don't know what's going on
after updating to xcode 8.1 I have this error:

/Users/vahid/Desktop/PersianCal/Pods/JTAppleCalendar/Sources/JTAppleCalendarView.swift:848:48: Binary operator '>=' cannot be applied to operands of type 'Date' and 'Date!'

this line of code:
if !(firstDayOfDate >= self.startOfMonthCache &&

So, I could not test direction.

Oh. Yea. that is an XCode 8 bug. They mentioned this in their release notes.
You need to update to JTAppleCalendar version 6.0.1 to fix this.
Once fixed, you can close this issue :]

Did not want to make a new issue but it seems var orientation is internal protected. Shouldn't it be public/open?

ah. Nevermind I see public func changeVisibleDirection

Did u changed something again? I can't use changeVisibleDirection function.

@AwesDea it is been changed to a final name that i will not change again.

I have changed it to the same name as the one inside a UICOollectionView. This helps everyone in that they would not have to remember any custom names that i makeup anymore.

The name of the variable under the UICOllectionView is this ->

calendarView.semanticContentAttribute = ....

This is now the same name provided by Apple

hey
thanks for the amazing library it helps a lot
although I have an issue with it
and it is that
the first six month of the Persian calendar has 31 days
and the second 5 months has 30 days
and for the last month it is 29 days but every 4 years in has 30 days
and I don't know how to implement it
I used Date formatter for The Persian Calendar but it was no good (first screenshot)
and I don't know why but when I use current date or "Date()"
it is not exact (2nd Screenshot)
as u can see it says that today is the 22nd of the month but actually It is the 31 first of the month

screen shot 1396-06-31 at 07 09 26

screen shot 1396-06-31 at 07 11 15

@AtrinNoori you also have to give the library a calendar instance setup for persian.

let myCalendar = Calendar(identifier: .persian)
myCalendar.timeZone = ....
myCalendar.locale = ....

let params = ConfigurationParameters(startDate: startDate, endDate: endDate, calendar: myCalendar)

How can I use the ReadingOrientation it's not in JTAppleCalendarView.
I installed 'JTAppleCalendar', '~> 7.1' via Cocoapods.

@mohammad19991 calendarView.semanticContentAttribute ?

I think that is the name of the variable for UICollectionsViews

yea I ended up using calendarView.semanticContentAttribute, Thanks.

Was this page helpful?
0 / 5 - 0 ratings