我有一个webservice,返回时间如下:
2015-04-22 15:09 // this is a string
我想将其转换为以下格式:
TUE APR 21, 2015 7:50 AM
JavaScript中是否有日期格式化功能?
答案 0 :(得分:1)
这方面有两个方面:
将该字符串解析为日期
格式化日期
有许多日期格式库可用于JavaScript,因为规范不提供任何格式化例程。 MomentJS就是其中之一,但有几个。
但不使用图书馆:
如果您使用字母T替换您收到的字符串中的空格,则可以使用new Date(...)
对其进行解析,因为它将采用日期/时间格式specified in ES5。 然而,有一个问题:ES5格式错误。它们基于ISO-8601,但表示如果没有时区指示符,代码应该表现为时区Z(UTC / GMT)被指定。那是错的; ISO-8601表示没有时区指示器意味着“当地时间”。在ES6中,它们是changing the spec以匹配ISO-8601,但这意味着我们现在处于某种实现(当前的Firefox)执行ES5的情况,而其他实现(当前的Chrome)执行ES6 / ISO -8601的事。 (try it here) 叹息 结果?如果没有时区指示,你就不能相信你得到的东西。
如果您知道给出的值是UTC,那么解析起来非常简单:将空格更改为T并在末尾添加Z:
var dt = new Date(str.replace(" ", "T") + "Z");
如果你知道它是“本地”时间,你必须解析它,好像它是UTC,然后添加时区偏移量:
var dt = new Date(str.replace(" ", "T") + "Z");
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset());
我 认为 仍可在DST边界上正常运行,但您需要进行测试。
JavaScript中是否有日期格式化功能?
不,您获得的是默认toString
(其格式未由规范指定)和toISOString
以YYYY-MM-DDThh:mm:ssZ
格式输出。
您确实获得了为您提供各个部分的方法(以当地时间[例如getHours
]或UTC [例如getUTCHours
])。
各种例子:
// The string
var str = "2015-04-22 15:09";
// Get the date
var dt = new Date(str.replace(" ", "T"));
// Hours, minutes, seconds
snippet.log("Hours: " + dt.getHours());
snippet.log("Minutes: " + dt.getMinutes());
snippet.log("Seconds: " + dt.getSeconds());
// Day, month, year -- note that months start at 0
snippet.log("Day of month: " + dt.getDate());
snippet.log("Month: " + dt.getMonth()); // 3 = April
snippet.log("Year: " + dt.getFullYear());
// UTC stuff
snippet.log("Hours UTC: " + dt.getUTCHours());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
答案 1 :(得分:0)
Javascript中没有日期格式化程序,但您可以从日期对象创建自定义日期字符串,如下所示:
var day_names = new Array("SUN", "MON", "TUE", "WED",
"THU", "FRI", "SAT");
var month_names = new Array("JAN", "FEB", "MAR", "APR", "MAY",
"JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
var date = new Date();
var curr_day = date.getDay();
var curr_date = date.getDate();
var curr_month = date.getMonth();
var curr_year = date.getFullYear();
var cur_hour = date.getHours();
var minutes = date.getMinutes();
var AMorPM = cur_hour >= 12 ? AMorPM = "PM" : AMorPM = "AM";
cur_hour = cur_hour > 12 ? cur_hour -= 12 : cur_hour;
if (cur_hour < 10) cur_hour = "0" + cur_hour;
if (minutes < 10) minutes = "0" + minutes;
var finalDate = "<b>" + day_names[curr_day] + " " +
month_names[curr_month] + " " + curr_date + ", " +
curr_year + " " + cur_hour + ":" + minutes + " " +
AMorPM + "</b>";
document.getElementById('dateTime').innerHTML = finalDate;