PHP有一个名为date_default_timezone_set的函数,它会影响GMT,使用Date()命令。
有没有办法影响JS?
我有这个功能:
function calcTime(offset) {
d = new Date();
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
nd = new Date(utc + (3600000*offset));
return nd;
}
可能会调用New Date();她的问题很好,除了我想得到New Date(); 但是,如果我想传递参数,那么这更多的是一个问题...例如, 新日期(年,月);
有没有人像PHP这样的解决方案只影响New Date();本身没有改变函数被称为?
答案 0 :(得分:3)
这是一个不幸的问题。 JavaScript不允许您设置默认时区。并且JavaScript不容易将Date子类化。您不能将Date的构造函数作为函数调用,如果使用任何undefined
参数创建日期,则会得到无效日期。
因此,要么像你一样创建自定义函数,要么创建create a custom date object and define all the functions from Date。
为了向前兼容和简单的代码,这是一个自定义功能解决方案。
(function(){
// Internal timezone settings
var offset_hr = 0;
var offset_ms = 0;
// Get current default timezone in hours
window.getTimezoneOffset = function getTimezoneOffset ( ) { return offset_hr; }
// Set current default timezone in hours
window.setTimezoneOffset = function setTimezoneOffset ( offset ) {
offset_hr = offset * 1 ? offset * 1 : 0;
offset_ms = offset ? offset * 60 * 60 * 1000 : 0;
}
// Create a date with default timezone
window.newDate = function newDate ( year, month, day, hour, min, sec, ms ) {
// Create base date object
var d;
switch ( arguments.length ) {
case 0 : d = new Date( ); break;
case 1 : d = new Date( year ); break;
case 2 : d = new Date( year, month ); break;
case 3 : d = new Date( year, month, day ); break;
case 4 : d = new Date( year, month, day, hour ); break;
case 5 : d = new Date( year, month, day, hour, min ); break;
case 6 : d = new Date( year, month, day, hour, min, sec ); break;
case 7 : d = new Date( year, month, day, hour, min, sec, ms ); break;
}
// Convert to utc time
var offset = d.getTimezoneOffset();
if ( offset || offset_ms ) d.setTime ( d.getTime() + offset * 60 * 1000 + offset_ms );
return d;
}
})();
使用示例:
setTimezoneOffset( '+2' );
newDate();
newDate('2011-01-24');
newDate(new Date().getTime());
newDate(2011, 12, 31);
newDate(2011, 12, 31, 12, 34, 56, 789);
只要您不检查新日期的getTimezoneOffset,就可以了。