将YYYY-MM-DD和24小时时钟更改为格式化日期时间

时间:2015-04-15 11:03:48

标签: javascript jquery

我有一个webservice,返回时间如下:

2015-04-22 15:09 // this is a string

我想将其转换为以下格式:

TUE APR 21, 2015 7:50 AM 

JavaScript中是否有日期格式化功能?

2 个答案:

答案 0 :(得分:1)

这方面有两个方面:

  1. 将该字符串解析为日期

  2. 格式化日期

  3. 有许多日期格式库可用于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(其格式未由规范指定)和toISOStringYYYY-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] + "&nbsp;" + 
    month_names[curr_month] + "&nbsp;" + curr_date + ", " + 
    curr_year + "&nbsp;" + cur_hour + ":" + minutes + "&nbsp;" + 
    AMorPM + "</b>";

document.getElementById('dateTime').innerHTML = finalDate;

DEMO