2011-06-17 47 views
1

如果時間晚於某一天的21點,我正在尋找更改我網站上圖片的方法。基本上我不想手動做,因爲當我需要切換圖像時,我無法訪問計算機。我無法使用PHP,因爲我正在處理的網站不支持PHP(僅限ASP)。在確定的時間更改圖片

我想這可以在Javascript中完成。

編輯:圖片需要在21更改一次,永遠不會改變,即使在第二天。

+0

你可以使用ASP。 – SLaks

+1

你想讓它改變圖片21pm的用戶當地時間,還是某個特定的時區? – Niklas

回答

0

您可以創建一個Date對象,(根據客戶)獲得當天的當前小時,改變圖像的基礎上相應小時的源:

​​

更新(基於評論)

如果您希望圖像在特定日期的21:00更改,並且在該日期之後保持爲新圖像(並且您確實想使用JavaScript),那麼您可以創建一個Date對象指定的日期/時間(例如var d = new Date('June 18, 2011 21:00:00');),你可以再與您指定的日期時比較當前日期的頁面加載:

var d = new Date('June 18, 2011 21:00:00'); 
var current = new Date(); 
if(current > d) { 
    document.getElementById("imageID").src = "newImage.png"; 
} 

你可以看到這個here的一個例子。 (註釋掉第一行,並在第二行註釋以查看未來日期和過去日期的差異)。

+0

但是後面的圖像會保持不變嗎?我真的需要它只能改變一次 –

+0

你的意思是你想讓圖像在特定的日期和時間改變,並在此之後永遠保持新圖像? –

+0

@Francis - 查看更新的答案,以達到我認爲你的意思。 –

0

使用javascripit日期對象?

編輯每@喬的建議

//initialize date object 

    function CheckAndChangeImage() { 
    var d = new Date(); 
    var currentHour = d.getHours(); //note 0-23 
    var currentDay = d.getDate(); 
    var currentMonth = d.getMonth(); 
    var currentYear = d.getYear(); // 2011 == 111 

    if (currentHour >= 21 && currentDay >= 17 && currentMonth >= 5 && currentYear >= 111) 
    { 
     //do something on late night (21,22,23 hundread hrs) 
     document.getElementById('thePicture').src = 'lateNight.png'; 
     } 
    /* commented out, per OP edit 
    else 
    { 
     //do something else 
     document.getElementById('thePicture').src = 'OtherPicture.png'; 
     } */ 
    } 

setInterval(CheckAndChangeImage,60000); //60,000 milliseconds in a minute` 

這將檢查它是否等同或者超過21hrs用戶機器上更大,日期是今天之後。 setInterval(function,ms)每分鐘都會檢查一次,所以如果用戶在20:59到達您的站點,它應該仍然在21:00更改。你提到的圖片需要改變一次,永遠不要再改變。這個解決方案非常難看。我建議在本地機器上設置一個cron在21:00運行並更新時間站點。也許PHP可以做到這一點,但PHP不是我選擇的語言。我可能會使用python和/或bash來完成這個任務。但是你可以用Perl來完成它。我會建議一個X/HTML解析器。

更多日期對象

GETDATE()上,則返回)的 月的一天(1-31)
getDay(返回星期幾(從0-6)
和getFullYear()返回年份(四位數)
調用getHours()返回小時值(0-23)
getMilliseconds()返回毫秒(0-999)
getMinutes()返回分鐘(從0〜 59)
得到月()返回月(從0-11)
getSeconds()返回秒(從0-59)
的getTime()返回自午夜1月1日,1970年
使用getTimezoneOffset()返回的毫秒數GMT和本地 時間之間
GETUTCDATE()的時間差,以分鐘爲單位返回月份的一天,按照通用時間 (1-31)
getUTCDay()返回星期幾,按照通用時間 (從0-6)
getUTCFullYear()根據世界時間返回年份 (四位數)
getUTCHours()返回小時,按照通用時間(從 0-23)
getUTCMilliseconds()返回毫秒,根據 通用時間(從0-999)
getUTCMinutes() (從 0-11)
getUTCSeconds()返回秒,根據通用時間 返回分鐘,根據通用時間 (從0-59)
getUTCMonth()返回月,按照通用時間(從0-59)
getYear()已棄用。使用方式和getFullYear()方法,而不是
解析()解析日期字符串,並返回自1月1日午夜毫秒 的數量,1970年
的setDate()設置每月的天(1-31)
調用setFullYear ()設置年份(四位數)
調用setHours()設置小時(從0-23)
setMilliseconds()設置毫秒(0-999)
setMinutes()設置分鐘(從0-59 )
setMonth()設置月份(從0-11)
setSeconds()設置秒數(從0-59)
時刻設定()通過加上或減去一個指定 數毫秒到/從 午夜1970年1月1日
調用setUTCDate()設置月份中的日期設置一個日期和時間,按照通用時間 (從1-31 )
調用setUTCFullYear()設置年,根據世界時(4 位)
調用setUTCHours()設置小時,按照通用時間(從 0-23)
setUTCMilliseconds()設置毫秒,根據通用 時間(從0-999)
setUTCMinutes()設置分鐘數,acc奧爾丁通用時間(從 0-59)
setUTCMonth()設置月份,按照通用時間(從 0-11)
調用setUTCSeconds()設置秒,按照通用時間(從 0-59 )
setYear()已棄用。使用調用setFullYear()方法代替
toDateString()一致Date對象的日期部分轉換爲 可讀的字符串
toGMTString()已過時。使用toUTCString()方法代替
toLocaleDateString()返回一個日期對象作爲 串的日期部分,使用語言環境約定
toLocaleTimeString()返回一個日期對象作爲 串的時間部分,使用語言環境約定
的toLocaleString()Date對象轉換爲字符串,使用區域設置 約定
的toString()日期對象到字符串
toTimeString(轉換)Date對象的時間部分轉換爲 串
toUTCString()根據0123將Date對象轉換爲字符串通用時間
UTC()返回日期字符串的毫秒數,因爲 午夜1970年1月1日,根據 通用時間
的valueOf()返回objecti日期的原始值

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date提供和日期對象的概述

所以也沒有W3Schools的 http://www.w3schools.com/jsref/jsref_obj_date.asp

0

你應該在後端做這件事,這是額外的開銷在客戶端沒有真正的原因,但讓我們嘗試在JS嘗試!

var myDate = new Date(); 

var curr_hour = myDate.getHours(); 

var day = myDate.getDate(); 
var month = myDate.getMonth()+1; 
var year = myDate.getFullYear(); 

if(curr_hour>=21 && (day==17 && month==5 && year==2011)) 
    document.getElementById('myPicture').src = 'source.jpg'; 

圖片將21後改爲05/17/2011(只爲這一天)

+0

希望我能做到後端,但正如我所說的網站不支持PHP,我不知道ASP! –

+0

所以這將是代碼,如果我希望它改變後2011年5月17日,永遠之後 var myDate = new Date(); var curr_hour = myDate.getHours(); var day = myDate.getDate(); var month = myDate.getMonth()+ 1; var year = myDate.getFullYear();如果(curr_hour> = 21 &&(day> = 17 && month> = 6 && year = 2011)) document.getElementById('myPicture')。src ='source.jpg'; –

+0

實際上沒有,因爲month> = 6且day> = 17意味着它將工作,只有當該月是等於或大於6(六月)時,例如 - 05/2012將不起作用。爲了解決這個問題,你可以創建一堆更多的IF語句,或者......去這裏http://www.onlineconversion.com/unix_time.htm並獲取你想要觸發的那一天的時間戳05/17/2011年(21)是1305666000(請記住,JavaScript計數以毫秒爲單位,網站返回秒,所以做一個* 1000之後 - 它變成1305666000000),我們的if語句變成if((new Date())> = 1305666000){/*東西*/... – Pantelis

1

已經發布的答案應該工作。但是,請注意,您必須觸發此功能,您可以在頁面加載事件中執行此操作(如果您想在用戶加載頁面時只檢查一次);或者你可以設置一個每10分鐘(或者你想要的分鐘數)的計時器,觸發這樣的功能。這取決於你的網站的性質和用戶在頁面上花費的時間(如果最多幾分鐘,它不值得)

+0

+1好的建議。 – matchew