在JavaScript中解析日期和时间
我有一个问题,我正试图解决整整一天。 我在HTML页面上显示Oracle数据库的日期和时间。我有jstl日期格式化程序,它有特殊的模式来显示它。我们举个例子09.05.2017 17:35 +0500
和模式MM.dd.yyyy HH:mm Z
。我用jQuery将其作为String来获取。第一种情况:如何将其转换为日期类型而不做任何更改。我尝试了var date = new Date('09.05.2017 17:35 +0500')
,但如果我有另一个时区,我会收到另一个UTC和时间(小时)或可能是月份等。 第二:如何将此时间转换为UTC + 0300。 我知道这种情况的一个解决方案,但我认为这并不容易。由于我有不断的日期模式,我总是可以解析字符串并编写大量逻辑来解决第二种情况。我在JS中很糟糕,并会很感激解决方案。在JavaScript中解析日期和时间
关于解析问题,回答于Why does Date.parse give incorrect results?底线是您应该手动解析字符串,而不是依赖内置解析器。一个库可以提供帮助,但是如果你只有一种或两种格式需要处理,编写你自己的解析器并不是很难。
至于在一个特定的时区呈现时间,同样的建议适用。如果您始终需要UTC + 0300,那么首先了解JavaScript日期内部始终是UTC,并使用UTC方法来访问这些值。因此,您只需按所需的偏移更改UTC时间并根据需要格式化日期。
对于格式,请参阅Where can I find documentation on formatting a date in JavaScript?
的调整时区的例子:
// Return a string for UTC+0300 for the supplied date
// in dd-mm-yyyy hh:mm:ss format
function getUTC03(date) {
// Helper to pad with leading zero
function z(n){return ('0'+n).slice(-2)}
// Copy the date so don't affect original
var d = new Date(+date);
// Set UTC time to required offset
d.setUTCHours(d.getUTCHours() + 3);
// Format using UTC methods
return z(d.getUTCDate()) + '-' +
z(d.getUTCMonth()+1) + '-' +
d.getUTCFullYear() + ' ' +
z(d.getUTCHours()) + ':' +
z(d.getUTCMinutes()) + ':' +
z(d.getUTCSeconds()) + ' ' +
'+0300';
}
console.log('Currently at +0300 it\'s ' + getUTC03(new Date()));
然而,许多地方观察夏令时。为了适应这一点,图书馆很有帮助。你只需要提供一个可以为任何特定日期和时间确定偏移量的位置。同样,这里也有很多问题。
也许你可以试试这个不错的Javascript日期时间库: https://momentjs.com/ – oopsdazie
你应该避免一次询问多个不同的问题。有关解析,请参阅[*为什么Date.parse提供不正确的结果?](https://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results)还要谨慎使用标记,不同的解析器使用不同的标记。 – RobG