在javascript中处理日期(格式和时区)

时间:2011-08-02 19:12:56

标签: javascript date

用例是我通过ajax调用获取millis(来自epoch)的日期,现在需要在javascript中进行解释。这相当于UTC的某个时间点。

现在我需要在PST中显示这个日期,因为这是用户唯一的相关时区,无论他们从哪里打开页面。 另外,我需要以不同的格式显示它,例如'yyyy-mm-dd HH:mm',而不是默认的Locale字符串。

有人可以告诉我,我该怎么做。

5 个答案:

答案 0 :(得分:2)

使用UNIX毫秒值加上PST的偏移量创建一个新日期,然后使用getUTC系列调用创建格式化字符串。

答案 1 :(得分:1)

Moment.js对于这类事物来说是一个非常好的库。

答案 2 :(得分:0)

我相信当您使用新的Date()函数时,时区由用户的时区设置决定。

var myDateTime = 1312312732923; 
var myDate = new Date(myDateTime); 

var myFormattedDate = myDate.getFullYear() + "-" + (myDate.getMonth()+1) + "-" + myDate.getDay();

http://www.w3schools.com/jsref/jsref_obj_date.asp

答案 3 :(得分:0)

使用Date对象:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

Javascript的Date对象使用毫秒而不是秒,因此您必须将UNIX时间戳乘以1000:

var myDate = new Date(unix_timestamp * 1000);

然后,您可以使用特定于本地的Date对象来执行您喜欢的任何操作:

var output = myDate .getHours() + ':';
output += myDate .getMinutes() + ':';
output += myDate .getSeconds();
alert(output);

编辑啊,无论语言环境如何,总是错过了关于使用PST的部分。 unix_timesamp再次是您从服务器获取的epoch / UNIX时间戳:

在此处试试:http://jsfiddle.net/46PYZ/

  // set to the UTC offset for the target timezone, PST = UTC - 8
    var target_offset = -8;

    // create a Date object
    var myDate = new Date();

    // add local time zone offset to get UTC time in msec
    var utc_milliseconds = (unix_timesamp * 1000) + (myDate .getTimezoneOffset() * 60000);

    // set the time using the calculated UTC timestamp
    myDate.setTime(utc_milliseconds + (3600000 * target_offset));

    // now build the yyyy-mm-dd HH:mm format
    var output = myDate.getFullYear() + '-';
    var month = myDate.getMonth() + 1;
    output += (month < 10 ? '0' + month : month) + '-';
    output += myDate.getDate() + ' ';
    var hours = myDate.getHours() + 1;
    output += (hours < 10 ? '0' + hours : hours) + ':';
    var minutes= myDate.getMinutes() + 1;
    output += (minutes< 10 ? '0' + minutes : minutes);

答案 4 :(得分:0)

JavaScript现在可以设置您想要显示内容的时区。我使用Flot作为库进行制图,他们建议的解决方案是在显示日期时使用getUTC方法。这意味着您的服务器代码无法从epoch发送标准millis(因为这将显示GMT时间),但是对服务器进行小幅调整将使您的日期在客户端上正确显示。

要了解此问题,请参阅http://flot.googlecode.com/svn/trunk/API.txt,然后查找“时间序列数据”标题