我正在处理日期问题,由于某些原因,这对我来说是不合理的,我将不胜感激:
基本上,我让用户使用输入日期方法选择一个日期,这给出了一个没有时间的简单日期字符串,然后我尝试使用以下方法将其转换为日期对象:
let localDate = new Date(this.startDate);
我希望输出结果是本地时间,因为通常new Date()将提供一个本地时间对象,但是结果对象是指定日期的午夜,但采用UTC。
我的目标是获取用户选择日期的午夜(本地时区),然后将其转换为Epoch。目前,当我尝试使用自己的代码时,得到的是所选日期的午夜,但以UTC时间表示。
答案 0 :(得分:1)
Date MDN Page中对此进行了记录,如下所示:
对ISO 8601格式的支持不同之处在于,仅日期字符串(例如 “ 1970-01-01”)被视为UTC,而不是本地。
我建议您将日期对象保存在变量中,然后将小时手动设置为0。一个例子是:
var d = new Date("2018-09-08");
d.setHours(0);
这样,您将小时设置为00:00:00,并将其保留为本地时间。问题是此问题取决于浏览器。我已经在Safari和Chrome上进行了测试,并且可以正常工作。新的日期是本地时间,但不是00:00。例如,我在格林尼治标准时间+3上,新日期显示的小时是03:00:00 GMT+0300
。
即使如此,在Firefox中这也不起作用。 Firefox将其作为世界标准时间00:00。所以您在这里有一些选择。您可以使用new Date().getTimezoneOffset();
获得时区偏移。请注意,此方法容易出错。您可以使用以下内容来计算当地时间与UTC -(new Date().getTimezoneOffset() / 60)
的时差,并用它在日期字符串中指定时区。
这很快就会变得复杂,您可能会在Javascript中遇到一些奇怪的问题。因此,如果您只需要使用日期作为字符串,则适用于所有浏览器的简单解决方案就是使用:
var d = new Date("2018-09-08");
d.toLocaleString();
希望这对您有帮助!