我需要将我的日期转换为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
。
有人可以解释一下这个问题吗?
如何获得正确的结果?
这是一个错误吗?
答案 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];
添加一些错误检查,您已完成。