{"id":108,"date":"2014-12-30T16:29:15","date_gmt":"2014-12-30T08:29:15","guid":{"rendered":"http:\/\/vinta.ws\/code\/?p=108"},"modified":"2026-02-18T01:20:37","modified_gmt":"2026-02-17T17:20:37","slug":"datetime-format-in-python-javascript","status":"publish","type":"post","link":"https:\/\/vinta.ws\/code\/datetime-format-in-python-javascript.html","title":{"rendered":"Parse datetime in Python and JavaScript"},"content":{"rendered":"<h2>Python<\/h2>\n<p>I recommend <code>dateutil<\/code>.<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/dateutil.readthedocs.org\/en\/latest\/\">https:\/\/dateutil.readthedocs.org\/en\/latest\/<\/a><\/p>\n<pre class=\"line-numbers\"><code class=\"language-py\">import datetime\nfrom dateutil import parser as dateutil_parser\n\n&gt;&gt;&gt; dateutil_parser.parse('2014-12-24T16:15:16')\ndatetime.datetime(2014, 12, 24, 16, 15, 16)\n\n&gt;&gt;&gt; datetime_obj = datetime.datetime.strptime('2014-12-24T16:15:16', '%Y-%m-%dT%H:%M:%S')\ndatetime.datetime(2014, 12, 24, 16, 15, 16)\n\n&gt;&gt;&gt; datetime_obj = datetime.datetime.strptime('201408282300', '%Y%m%d%H%M')\ndatetime.datetime(2014, 8, 28, 23, 0)\n\n&gt;&gt;&gt; datetime_obj.strftime('%Y-%m-%d %H:%M')<\/code><\/pre>\n<p>strftime &gt;&gt; datetime -&gt; str<br \/>\nstrptime &gt;&gt; str --&gt; datetime<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/docs.python.org\/2\/library\/datetime.html#strftime-and-strptime-behavior\">https:\/\/docs.python.org\/2\/library\/datetime.html#strftime-and-strptime-behavior<\/a><\/p>\n<h2>Django Template<\/h2>\n<pre class=\"line-numbers\"><code class=\"language-py\">class DriverInfoForm(forms.ModelForm):\n    service_time_start = forms.TimeField(\n        widget=forms.TimeInput(format='%H:%M'),\n        input_formats=['%H:%M', ]\n    )\n\n@register.filter\ndef str_to_time(time_str, output_format):\n    \"\"\"\n    \u628a\u5b57\u4e32\u8f49\u6210 datetime obj\n    \u518d\u4f9d\u64da output_format \u8f38\u51fa\n\n    {{ news.modified_at|str_to_time:\"%Y\/%m\/%d %H:%M\" }}\n    \"\"\"\n\n    from dateutil import parser\n\n    datetime_obj = parser.parse(time_str, fuzzy=True)\n\n    return datetime_obj.strftime(output_format)<\/code><\/pre>\n<pre class=\"line-numbers\"><code class=\"language-html\">\u65e5\u671f\uff1a{{ withdraw.presented_at|date:\"%Y \u5e74 %n \u6708\" }}\n\u806f\u7d61\u6642\u9593\uff1a{{ driver.service_time_start|date:\"H:i\" }} - {{ driver.service_time_end|date:\"H:i\" }}<\/code><\/pre>\n<p>\u8981\u6ce8\u610f\u7684\u662f\uff0cDjango \u4f3c\u4e4e\u4e0d\u80fd parse AM \/ PM\uff0c\u6240\u4ee5\u5118\u91cf\u7528 24 \u5c0f\u6642\u5236\u3002<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/ref\/templates\/builtins\/#date\">https:\/\/docs.djangoproject.com\/en\/dev\/ref\/templates\/builtins\/#date<\/a><\/p>\n<h2>JavaScript<\/h2>\n<p>I recommend <code>moment.js<\/code>.<\/p>\n<p>ref:<br \/>\n<a href=\"https:\/\/momentjs.com\/\">https:\/\/momentjs.com\/<\/a><\/p>\n<pre class=\"line-numbers\"><code class=\"language-js\">var today = new Date().toISOString().slice(0, 10);\n\/\/ 2016-05-11\n\nvar t1 = new Date('2016-05-02T03:00:00.000+01:00');\n\/\/ Mon May 02 2016 10:00:00 GMT+0800 (CST)\n\nvar t1_timestamp_ms = t1.getTime();\n\/\/ \u8981\u6ce8\u610f\u7684\u662f JavaScript \u7684 getTime() \u7684\u55ae\u4f4d\u662f ms\n\/\/ 1462154400000\n\nvar t1_timestamp = t1.getTime() \/ 1000;\n\/\/ 1462154400\n\nvar t2 = new Date(1485596172 * 1000);\n\/\/ Sat Jan 28 2017 17:36:12 GMT+0800 (CST)\n\nvar t3 = moment('201408292300', 'YYYYMMDDHHmm');\n\nvar t3 = moment('2018-02-02')\nvar timestamp = time.unix()\n\/\/ \u55ae\u4f4d\u662f second\n\/\/ 1518192000<\/code><\/pre>\n<p>ref:<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/3552461\/how-to-format-a-javascript-date\">https:\/\/stackoverflow.com\/questions\/3552461\/how-to-format-a-javascript-date<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Use dateutil and moment.js<\/p>\n","protected":false},"author":1,"featured_media":768,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,4,116],"tags":[50,13,11,2],"class_list":["post-108","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-about-javascript","category-about-python","category-about-web-development","tag-datetime","tag-django","tag-javascript","tag-python"],"_links":{"self":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/comments?post=108"}],"version-history":[{"count":0,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/posts\/108\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media\/768"}],"wp:attachment":[{"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/media?parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/categories?post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vinta.ws\/code\/wp-json\/wp\/v2\/tags?post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}