当时区更改时,JavaScript Date()会有所不同

时间:2016-09-20 10:14:35

标签: javascript date timezone

我需要将我的日期转换为mm-dd-yyyy格式。所以我使用了这样的方法:

var dt=new Date(2016-06-21);

var ddte='';

ddte=(("0" + (dt.getMonth() + 1)).slice(-2))+"-"+(("0" + dt.getDate()).slice(-2))+"-"+dt.getFullYear();

它在我当地的时区(GMT+05:30)中运行正常。但是,当我将时区更改为GMT -5:00时,会产生错误的结果:06-20-2016。我想要的结果是06-21-2016

  1. 有人可以解释一下这个问题吗?

  2. 如何获得正确的结果?

  3. 这是一个错误吗?

2 个答案:

答案 0 :(得分:1)

传递给Date()构造函数的日期将被视为UTC时区。获得Date.getMonth()的时间将获得您当地的时区。您可能正在寻找Date.getUTCMonth()

var dt=new Date("2016-06-21");

var ddte='';

ddte=(("0" + (dt.getUTCMonth() + 1)).slice(-2))+"-"+(("0" + dt.getUTCDate()).slice(-2))+"-"+dt.getUTCFullYear();

console.log(ddte);

虽然在这种情况下我认为根本不使用Date;这应该足够了:

var parsedDate = "2016-06-21".replace(/(\d{4})-(\d{2})-(\d{2})/, "$2-$3-$1");
console.log(parsedDate);

答案 1 :(得分:0)

这不是一个错误。它只是时区如何运作(它不是同一时间世界各地的同一日历日)。

如果你真的不想要高级日期功能(似乎你只想要一些好的旧字符串操作),我的建议是首先不要使用Date

var parts = "2016-06-21".split("-");
var mdy = parts[1] + "-" + parts[2] + "-" + parts[0];

添加一些错误检查,您已完成。