gpt4 book ai didi

php - 在 JS 中默认更改时区

转载 作者:搜寻专家 更新时间:2023-10-31 20:51:39 24 4
gpt4 key购买 nike

PHP 有一个名为 date_default_timezone_set 的函数,它影响 Date() 命令使用的 GMT。

有没有办法它也影响 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();本身而不改变函数被调用?

最佳答案

这是一个不幸的问题。 JavaScript 不允许您设置默认时区。并且 JavaScript 并不容易将 Date 子类化。您不能将 Date 的构造函数作为函数调用,如果您使用任何 undefined 参数创建 Date,您将得到一个无效日期。

所以,要么你像以前一样创建一个自定义函数,要么你 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,就可以了。

关于php - 在 JS 中默认更改时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6860572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com