2017-09-05 279 views
-1

我有一个问题,我正试图解决整整一天。 我在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中解析日期和时间

+0

也许你可以试试这个不错的Javascript日期时间库: https://momentjs.com/ – oopsdazie

+0

你应该避免一次询问多个不同的问题。有关解析,请参阅[*为什么Date.parse提供不正确的结果?](https://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results)还要谨慎使用标记,不同的解析器使用不同的标记。 – RobG

回答

0

关于解析问题,回答于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()));

然而,许多地方观察夏令时。为了适应这一点,图书馆很有帮助。你只需要提供一个可以为任何特定日期和时间确定偏移量的位置。同样,这里也有很多问题。