7

我正在尝试将当前时间设置为其他时间,每当我尝试访问当前时间时,我都需要获取新时间。假设我的本地机器上的当前时间是凌晨 2 点。但是我想将其更改为上午 10 点,并且当我访问它时,当前时间应该从上午 10 点开始,而不是凌晨 2 点。

前任:

var x = new Date();

如果您看到 x.getHours() 获取我的当地时间,即凌晨 2 点,并且每次它都以凌晨 2 点为基准。

但是我需要将其更改为上午 10 点,以便我的 new Date() 给出上午 10 点,并以此为基础每秒保持滴答声。

我不想为此目的使用 setInterval() 。我肯定有 setInterval() 的解决方案。但问题是我有多个 setIntervals,另一个停止更新 setInterval() 中的时间,我试图每秒更新上午 10 点。

4

5 回答 5

7

您不能从 Javascript 更改系统时间,如果它是从浏览器运行的,则不能。您需要一个特殊的环境,一个能够连接 javascript 和操作系统的 API 的环境。这不是一件简单的事情,而且可能超出了您正在处理的应用程序的范围。

我建议您创建一个函数/对象,以获取带有偏移量的当前日期。像这样:

Foo = function () {};
Foo.prototype.offset = 8;
Foo.prototype.getDate = function () {
    var date = new Date();
    date.setHours(date.getHours() + this.offset);
    return date;
}

现在您可以实例化 a foo,设置偏移量(默认为 8)并使用它。当您需要偏移时间时,您可以这样做:

var foo = new Foo();
var bar = foo.getDate();

bar不会打勾,但是当您需要带有偏移量的当前日期时,您可以再次使用Foo's getDate

编辑:为了从固定日期开始,您可以使用这样的构造函数:

Foo = function (baseDate) {
    this._date = baseDate;
    this._fetched = new Date();
}

Foo.prototype.getDate = function () {
    var now = new Date();
    var offset = now.getTime() - this._fetched.getTime();
    this._date.setTime(this._date.getTime() + offset);
    this._fetched = now;
    return this._date;
}

请注意,这now.getDay()将返回星期几,而不是月份中的某一天。因此在now.getDate()上面。(编辑为使用基准日期而不是固定的硬编码日期)。

于 2013-08-07T16:29:59.717 回答
6

使用TimeShift.js这可以相当容易地完成。在页面的开头包含 TimeShift.js 并明确设置日期。其手册的无耻副本:

new Date().toString();                      // Original Date object
"Fri Aug 09 2013 23:37:42 GMT+0300 (EEST)"

Date = TimeShift.Date;                      // Overwrite Date object
new Date().toString();
"Fri Aug 09 2013 23:37:43 GMT+0300"

TimeShift.setTimezoneOffset(-60);           // Set timezone to GMT+0100 (note the sign)
new Date().toString();
"Fri Aug 09 2013 21:37:44 GMT+0100"

TimeShift.setTime(1328230923000);           // Set the time to 2012-02-03 01:02:03 GMT
new Date().toString();
"Fri Feb 03 2012 02:02:03 GMT+0100"

TimeShift.setTimezoneOffset(0);             // Set timezone to GMT
new Date().toString();
"Fri Feb 03 2012 01:02:03 GMT"

TimeShift.getTime();                        // Get overridden values
1328230923000
TimeShift.getTimezoneOffset();
0

TimeShift.setTime(undefined);               // Reset to current time
new Date().toString();
"Fri Aug 09 2013 20:37:45 GMT"

new Date().desc();                          // Helper method
"utc=Fri, 09 Aug 2013 20:37:46 GMT   local=Fri, 09 Aug 2013 20:37:46 GMT   offset=0"

new TimeShift.OriginalDate().toString();    // Use original Date object
"Fri Aug 09 2013 23:37:47 GMT+0300 (EEST)"

我认为这比编写自定义 Date 对象/函数 (Foo) 稍微好一些,因为该库不需要您重写现有代码。

于 2015-10-20T13:43:13.213 回答
0

尝试:

<script>
function startTime()
{
var today=new Date(Thu Aug 08 2013 13:34:55 GMT+0200);
var h=today.setHours();
var m=today.setMinutes();
var s=today.setSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
document.getElementById('txt').innerHTML=h+":"+m+":"+s;
t=setTimeout(function(){startTime()},500);
}

function checkTime(i)
{
if (i<10)
{
i="0" + i;
}
return i;
}
</script>
</head>

<body onload="startTime()">
<div id="txt"></div>
</body>
于 2013-08-07T16:49:25.577 回答
-2

你可以试试:

漫长的道路:

var date = new Date();
var now = date.getTime();
now.setTime( 0,0,0,0 );
now.setMonth(4);
now.setDate(5);
now.setYear(2013);

捷径:

var date = new Date("Sat Apr 05 2013 19:30:13 GMT+0200 (IDT)");
于 2013-08-07T16:30:50.557 回答
-2

简单的:

var x = new Date("Fri Aug 09 2013 19:30:13 GMT+0300 (IDT)");

现在 x 的日期提前两天 (09/08/2013)

于 2013-08-07T16:31:36.283 回答