Oracle Apex Change date picker format - oracle

The current datepicker in Apex 20.1 looks like this:
However, is there a way to change its format to how a datepicker actually is in our laptops/systems?
i.e. id i click on June it'd show all the months to choose from and if i choose 2021, it'd show all years to choose from.
This would reduce moving monthwise to reach a date.

Under the settings of your datepicker, you should be able to select month/year 'Navigation List for'.
This will render the month/year as select lists, and will honour the min/max date settings.
Note, these options appear differently in 21.1

If there is a way, I don't know it.
What you could do, is to search for a plugin.
Benefit: you might find what you're looking for.
Drawback: sometimes, plugins are written and never maintained so they become obsolete and you can't use them in future Apex versions (unless you're capable of maintaining them yourself).
A simple workaround: type date, manually. You don't have to waste your time on clicking through a calendar to reach e.g. 22.06.1941; you'll be much, much faster if you actually press those 10 keyboard keys, 22.06.1941. Takes 3 seconds at most.

Related

How can I verify that AutoHistory is working in Visual Studio?

I'm trying to use the Visual Studio AutoHistory extension.
However, when I select "Take Snapshot" (except for the very first time), I see no difference in the AutoHistory pane. The "Old" timestamp remains the same and the "Now" edit box (and "X" to its right) are read-only:
How can I verify that my snapshots are really being taken? I feel as if the lens cap is still on the camera or something. How can I compare my last two snapshots?
It's not enough to look at the filename list with the 'old' and 'new' columns. Instead you really need to hover over those tiny snapshot entries to get information on when AutoHistory is doing the captures. If you want to change the label of a snapshot, seems like the interface requires you to grab the top of the little range box and drag it down to just above the item in question. Only then does it seem to allow your snapshot's label to be changed:
So, drag this box...
...down to this spot, right above the snapshot you just took:
And, apparently, a snapshot's label value is changed when the textbox looses focus (there's little indication that you've updated the text).
If you want to compare two snapshots, you have to painstakingly set the box's bounds to that of the two snapshots you want to compare:
I do like the power of this extension, but the interface can be maddening and isn't very intuitive.
Looks like the author(s) have abandoned support for it since they no longer reply to comments or requests. Would be awesome if it were open source since it just needs a few tweaks to really take this thing across the finish line!

NSDatePicker failing to refresh when setting date to current date

I have an NSDatePicker with an associated NSButton that changes the current date to "Today" when pressed.
However: When the date is currently January 4th, 2014, and I use the built-in arrow buttons to switch to a different month without changing the actual selected date, there seems to be no way to get the calendar to refresh. Here's a video of the issue:
Video of the Issue: https://www.dropbox.com/s/ay7fljnoyxb06ua/Calendar%20Test%20Video.mov
See the attached sample project for an example. To reproduce:
Click "Today"
Click the right-arrow button to switch to a different month (without selecting an actual day)
Click "Today"
The NSDatePicker seems to fail to refresh if you're programmatically selecting a date that is not in the currently-viewed month, and if the date that it is switching from is in a different month as well.
But, the date is properly picked. If you use the buttons to select a date, then manually browse back to the proper month, the date has been selected. But the calendar never shows you that month automatically, unless the date you're switching from is in the currently-viewed month.
Sample Project: https://www.dropbox.com/s/tnpox2mt5f5z2nb/CalendarTest.zip
I would file this as a bug against the API since there are no methods in the class that suggest you'd have to ask it to refresh manually (I'd assume setting the selected date would automatically display the proper range to show that selection).
As a work-around, you might try asking it to display ( -setNeedsDisplay:YES ) or manually twiddling its min/max range after setting the date, then setting it back to unlimited immediately after. Maybe that'll kick-start it into displaying the correct range for the selected date.

How to change locale for the calendar?

ALL,
I've been searching MSDN for the last couple of days and even asked on codeguru but to no availability.
So here goes...
Let's say I have a Windows XP computer whose current locale set to US-en. The calendar at the bottom right corner displays the date as 2/14/2014.
Now, let's say I am developing a program and I need to call the DatePicker control to show the date. And let's say that the user of the program will be around the world. For the sake of simplicity I will pick my own country - Russia. ;-)
Now how do I change the locale to the Russian? I thought I could just use ::SetThreadLocale() and be done, but this function will affect only some resources of my program, namely the dialog titles will be one. But it does not affect the calendar nor the DatePicker control.
Searching MSDN I found 2 more functions: SetLocaleInfo() which can't be called as MSDN says it will affect every single application on the system - not what I want - my only, and SetCalendarInfo() which looks OK, but I'm not sure if this is the one.
So, did I find the right function to call and if not is there a way to do what I want?
Thank you.

What's the best approach to get Date/Time input from the user?

This is a wheel that's been re-invented again and again over the years.
The Problem: The user needs to input a Date/Time
Basic considerations
We want to make it as easy as possible for the user to enter the desired date/time
Some applications call for historical dates, some applications call for future dates only, some will need to handle both
We want to prevent the user from entering jibberish data
We want to auto-populate this control as aggressively as possible.
We want this control to be as re-usable as possible.
Popular solutions include:
Text Boxes
Combo Boxes
Pop-out calendars
Server-side and/or client-side validation
Various ways of alerting the users about bad data
There are a panoply of ready-to-eat solutions about, but I'm looking for some more general information. Have there been any usability studies done on the various date-time-control approaches? Is there a "best" date-time control out there? Are there any well-established "Dos and Don'ts"?
Related question: Best GUI control(s) to describe a time range
My preference is for a text input with an elipsis button next to it:
Enter a date [ ] [...]
The elipsis would pop up a calendar to populate the text input, but the user can type in a date if they want. Validation should be done when the "OK" button for the form is pressed - trying to do date validation on a character by character basis is doomed, in my experience.
The validation should be sophisticated and allow expressions like
"today"
"Tomorrow"
"23 Jan"
etc.
Edit: In reply to some comments, one could do validation when the text edit loses focus (though I hate that kind of thing) in which case the edit content could change from "23 Jan" to "23-01-2009" to indicate that the exprssion was understood.
Give me a calendar to select the date with a mouse. And let me type the date in with the keyboard. Accept as many formats as possible. If I need to enter December 21, 2012, let me use:
Dec 21 2012
21DEC2012
December 21 2012
12/21/2012 (or 21/12/2012, pick one, perhaps depending on what country I'm using the software in)
12212012 (same parenthetical fragment as above)
Etc.
Whatever you decide to do to solve the localization issue, make sure it's obvious what you expect. Give me an example, or a template with MMDDYYYY that I can type over.
Please don't give me pull-down boxes where I have to scroll, especially through years. If I'm old, and I'm entering my DOB, I don't have enough time left in my life to scroll down to the bottom of your pull-down box. Pull-down boxes are a good pattern to use when I don't know what the options are, but if it's something I'm very familiar with, like my birth date, then pull-down menus are a hassle.
Now, WRT time inputs (Big pet peeve), don't assume that I meant 3 am. If I enter 3 for the time, assume I meant 3 pm. Make me do extra work to schedule something at 3 am. If you're uncomfortable with assuming that much on my behalf, at least alert me that I've scheduled something for 3 am so I can fix it now instead of later when someone on my event invitation list emails and says "You moron, you scheduled our D&D Meetup for 3 am!"
I think the date range entry on Google Calendar is quite good. You can enter by keyboard or by mouse. The only quibble would be in entering dates for a different year.
You can do it easily enough via the keyboard, but they should have a second set of little arrows on the calendar to jump a year at a time back or forth using the mouse.
EDIT: In response to the question, "What if you want to schedule an event that goes from 11PM on Tuesday till 1AM on Wednesday (say a daily build, for instance)? How do you wrap the time over midnight?"
If the "to" time pushes it over midnight, then roll the "to" date to the next day. That would just be part of the business logic of the component. You'll notice in the second image above, the drop-down indicates both the end time and the duration of the event, which should be a hint.
If you try and put an end date earlier than the start date, you can highlight the background colour of the fields and/or show an error message on save.
Play around on Google Calendar and see how it behaves.
I'd suggest you also allow for users who like to type rather than click on a calendar control, so a combination of text box + popup calendar works well.
We created a custom control with just such a combination. User can type a date in a variety of formats in the textbox, or click on a button to pop up the calendar.
We allow all sorts of input like "today", "wed", or "+2" (for day after tomorrow) and use regular expressions for most of the validation client side. We also do server side validation of course.
The control also has an optional textbox for time which can be enabled or hidden by a property. We felt it was easier to separate date from time. For times, we allow "9pm", "2100", "09:00" etc.
The control caters for a min and max date, so that date of birth can have a range from say -100 years to current year, while credit card expiry might range from current year to +5 years, and so we use range validators.
A text box with an image-link to a pop-out calendar on the side is my choice. Best of both worlds.
If you want something extra you could let a natural language date/time parser like Chronic http://chronic.rubyforge.org/ spice it up.
Also don't forget the international users.
If you're going for the combo-box/list-box option make sure you make the months read "Jan","Feb"..."Dec" rather than "1","2"..."12".
It's rather annoying having to figure out which slot is the month and which is the day according to the ranges of the values.
I'd go for three alternatives depending on the situation:
2 combo boxes. One listing year + month, another the day
3 combo boxes. One listing years, one month, one days
Visible calendar/s and combos like this one from YUI
And I believe there are more options from which I'd choose.
You need to check your UI requirements. If you want script-enabled support only, they you can go with any of your panopoly of scripts and run with whatever date/time format they provide into a hidden field.
However, if you need the user entry in a textbox, then you're faced with some decisions:
Is the date/time format rigid? e.g. mm/dd/yyy hh:mm:ss format only?
Or loosely defined, to allow for the "today", "tomorrow", "23 Jan" style entries?
Will the formats be locale-specific? e.g. mm/dd/yyyy vs. dd/mm/yyyy
Validation methods depend on your decisions on requirements.
I like the jQuery date-picker plugin. It'll allow output in specific formats.
A calendar showing multiple months continuously: http://www.cs.helsinki.fi/u/salaakso/patterns/Calendar-Strip.html
I've always found Google Calendar easy to use in this respect. You could certainly do worse than trying to emulate it. The key is to give the user a lot of flexibility in how they enter information. For example, I can select a time from a drop down list or type it in manually, and when I type, I'm not required to include the colon or the "m" in "pm".
I really like the way QT4's Date/Time widget works.
You can enter dates manually (type in the date, in common formats).
You can use your scroll wheel to quickly change date/time fields.
You have an expandable calendar that has drop down months and forward/backward arrows for the months. You can click on specific days and enter the year manually, or with a combo box (scroll wheel works here too).
Here is a short video (~7.5MB) that shows how the widget works and what some of its features are: Video Here
I would expect any sophisticated application to have some or all of these features.
Being able to enter relative dates (today, last week, 3 days ago) is handy, but I'm not sure how practical it would be, given standard questions like "What is your date of birth?", or "When would you like X emailed to you?".
you can use plugin cxcalendar. It looks like other datepicker. but you can pick year and month in select after clicking year-month title.

What is the most efficient way to populate a time (or time range)?

While plenty of solutions exist for entering dates (such as calendars, drop-down menus, etc.), it doesn't seem like there are too many "standard" ways to ask for a time (or time range).
I've personally tried drop-down menus for the hour, minute, and second fields (and sometimes an "AM/PM" field, as well). I've also tried several clock-like input devices, most of which are too hard to use for the typical end-user. I've even tried "pop-out" time selection menus (which allow you to, for example, hover over the hour "10" to receive a sub-menu that contains ":00",":15",":30", and ":45") -- but none of these methods seem natural.
So far, the best (and most universal) method I have found is just using simple text fields and forcing a user to manually populate the hour, minute, and second. Alternatively, I've had good experiences creating something similar to Outlook's "Day View" which allows you to drag and drop an event to set the start and end times.
Is there a "best way" to ask for this information? Is anybody using some type of time input widget that's really intuitive and easy to use? Or is there at least a way that's more efficient than using plain text boxes?
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
I find Google Calendar's approach to be the best. Use a text box, but use JavaScript to make it sort of a drop-down for picking your time. A good demo can be found for a jQuery implementation here
I haven't implemented this on my site yet so I'm not 100% sure, but I think you also need code from this jQuery plugin here:
http://www.texotela.co.uk/code/jquery/timepicker/
Edit
The first link I posted does not require the second link's code. It is simply based off of it. To get the actual JavaScript file from the example, you can view the source of the page to find where the file is, or you can go to the URL directly
http://labs.perifer.se/timedatepicker/jquery.timePicker.js
There is quite a useful time entry tool for JQuery. It provides a 'spinner' type approach, in addition to a standard text field. It also supports the use of the mouse scroll-wheel for adjustment (as well as the traditional 'just type it in' approach) and can be configured to restrict to n-minute steps too if you like. It's pretty customisable, supports localisation and a variety of other settings, I've used it successfully in a couple of projects/demo sites.
I am a huge fan of plain language input (there was a topic on it the other day). I like the way 37signals backpack calendar let's you type things in (08/12 3pm Meeting with tom). I also like the way they handle times with their reminder system (they give you options like later today, tomorrow morning).

Resources