diff --git a/frappe/core/doctype/system_settings/system_settings.json b/frappe/core/doctype/system_settings/system_settings.json index 572120bcb8..940b9ab63b 100644 --- a/frappe/core/doctype/system_settings/system_settings.json +++ b/frappe/core/doctype/system_settings/system_settings.json @@ -37,7 +37,7 @@ "fieldname": "date_format", "fieldtype": "Select", "label": "Date Format", - "options": "yyyy-mm-dd\ndd-mm-yyyy\ndd/mm/yyyy\nmm/dd/yyyy\nmm-dd-yyyy", + "options": "yyyy-mm-dd\ndd-mm-yyyy\ndd/mm/yyyy\ndd.mm.yyyy\nmm/dd/yyyy\nmm-dd-yyyy", "permlevel": 0, "reqd": 1 }, @@ -74,7 +74,7 @@ ], "icon": "icon-cog", "issingle": 1, - "modified": "2014-05-27 06:29:28.922976", + "modified": "2014-05-27 07:58:24.700595", "modified_by": "Administrator", "module": "Core", "name": "System Settings", diff --git a/frappe/public/js/legacy/datetime.js b/frappe/public/js/legacy/datetime.js index ff56951989..7b466c706f 100644 --- a/frappe/public/js/legacy/datetime.js +++ b/frappe/public/js/legacy/datetime.js @@ -128,6 +128,8 @@ frappe.datetime = { val = d[2]+'-'+d[1]+'-'+d[0] + time_str; else if(user_fmt=='dd/mm/yyyy') val = d[2]+'/'+d[1]+'/'+d[0] + time_str; + else if(user_fmt=='dd.mm.yyyy') + val = d[2]+'.'+d[1]+'.'+d[0] + time_str; else if(user_fmt=='yyyy-mm-dd') val = d[0]+'-'+d[1]+'-'+d[2] + time_str; else if(user_fmt=='mm/dd/yyyy') @@ -162,6 +164,10 @@ frappe.datetime = { var d = d.split('/'); var val = d[2]+'-'+d[1]+'-'+d[0]; } + else if(user_fmt=='dd.mm.yyyy') { + var d = d.split('.'); + var val = d[2]+'-'+d[1]+'-'+d[0]; + } else if(user_fmt=='yyyy-mm-dd') { var val = d; } diff --git a/frappe/utils/dateutils.py b/frappe/utils/dateutils.py index 096fb44aa8..d244d67d13 100644 --- a/frappe/utils/dateutils.py +++ b/frappe/utils/dateutils.py @@ -12,21 +12,22 @@ dateformats = { 'yyyy-mm-dd': '%Y-%m-%d', 'mm/dd/yyyy': '%m/%d/%Y', 'mm-dd-yyyy': '%m-%d-%Y', - "mm/dd/yy": "%m/%d/%y", + "mm/dd/yy": "%m/%d/%y", 'dd-mmm-yyyy': '%d-%b-%Y', # numbers app format 'dd/mm/yyyy': '%d/%m/%Y', + 'dd.mm.yyyy': '%d.%m.%Y', 'dd-mm-yyyy': '%d-%m-%Y', "dd/mm/yy": "%d/%m/%y", } def user_to_str(date, date_format=None): if not date: return date - + if not date_format: date_format = get_user_date_format() try: - return datetime.datetime.strptime(date, + return datetime.datetime.strptime(date, dateformats[date_format]).strftime('%Y-%m-%d') except ValueError, e: raise ValueError, "Date %s must be in format %s" % (date, date_format) @@ -34,11 +35,11 @@ def user_to_str(date, date_format=None): def parse_date(date): """tries to parse given date to system's format i.e. yyyy-mm-dd. returns a string""" parsed_date = None - + # why the sorting? checking should be done in a predictable order check_formats = [None] + sorted(dateformats.keys(), reverse=not get_user_date_format().startswith("dd")) - + for f in check_formats: try: parsed_date = user_to_str(date, f) @@ -53,17 +54,17 @@ def parse_date(date): (date, get_user_date_format()) return parsed_date - + def get_user_date_format(): if getattr(frappe.local, "user_date_format", None) is None: frappe.local.user_date_format = frappe.defaults.get_global_default("date_format") or "yyyy-mm-dd" return frappe.local.user_date_format - + def datetime_in_user_format(date_time): if not date_time: return "" if isinstance(date_time, basestring): date_time = get_datetime(date_time) from frappe.utils import formatdate - return formatdate(date_time.date()) + " " + date_time.strftime("%H:%M") \ No newline at end of file + return formatdate(date_time.date()) + " " + date_time.strftime("%H:%M")