是否有可能讓JavaScript計算從PHP的time()
函數返回的時間戳,並將其以可讀格式(例如「Sun,2010年4月18日下午4:00」)呈現?從PHP的時間開始JavaScript可讀的日期/時間()
回答
使用Date object做到這一點:
new Date(<?php echo time(); ?>*1000)
您需要通過1000乘以Unix時間戳監守Date
預計時間戳是毫秒。
而要格式化日期,您可以使用這個Date.format
method(日期沒有內置)。
你會想要非常小心的做這件事。如果服務器端時間值是傳統的「自」時代邊界「值起的秒數(或毫秒數),然後將其轉換爲某種」日期「對象,那麼轉換髮生在適合於上下文的區域設置。
當你使用你的網站得到了在夏威夷位於芝加哥的服務器,有人就會出現問題,說黨的「盧奧」事務—之一,毫無疑問,配有燒豬後基層掠過跳舞的女孩,在溫暖的熱帶天空下的罕見夜晚,充滿異國情調的鮮花,嗅着海洋的微風—現在已經晚了。我的天啊,差不多半夜了!當我爲她寫關於派對的文章時,母親會怎麼想?
我們派對的人在下午11:30坐下來使用您的網站。現在,當然,在夏威夷東部相當大的時候,你的服務器認爲它已經是凌晨5點30分了,而且日期比我們派對的人在他給媽媽的快速記錄中記下的日期晚了一天。因此,您的服務器將其時間值寫入網頁中,正如答案中所述,並且—正確—夏威夷當地時間顯示在我們的派對旅客房間的頁面上。
問題是這樣的:如果本地時間使它回到某種形式的現場應用程序,您的應用程序將其視爲本地時間在芝加哥,那麼你的網站將獲得昨天的日期。根據您的應用程序,它是確定或它的不正常 - 問題是,你必須保持的賽道,日期(普通日曆符號表示)來自面對面的人其中的日期爲使用。
你當然可以有相反的問題。也就是說,如果你的服務器總是呈現日期在其本地時區,然後用戶在世界其他地方會看到混亂(顯然是錯誤的)日期和時間值,所以接口有明確什麼那些值的含義。當您的網站提供涉及時間安排的服如果有可能安排操作,這一點很重要的是,接口保持中上水平的東西,使「4月30日下午10點」是指在服務器要麼日期和時間或區域設置日期和時間,從時間表被安排。無論如何,你必須小心保持事物的一致性。
取而代之的是數字UNIX時間戳,您還可以發送Date.parse()理解日期的文字表述。
也許這只是我對全球變暖的貢獻,但我覺得有使用的格式是一個比較人類可讀,幷包含時區信息的好處。
例如
<?php
// I have "decided" America/Los_Angeles fits most of my audience
date_default_timezone_set('America/Los_Angeles');
$now = time();
$yesterday = strtotime('yesterday', $now);
// March 27, 1976 08:00:00 tz:America/Los_Angeles
$someotherdate = mktime(8, 0, 0, 3, 27, 1976)
?><html>
<head><title>...</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function foo() {
$('.datetime').each(function() {
var t = $(this).text();
t = new Date(Date.parse(t)).toLocaleString();
$(this).text(t);
});
}
</script>
</head>
<body>
<div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div>
<button onclick="foo()">to local time</button>
</body>
</html>
這將打印
Sat, 17 Apr 2010 04:40:15 -0700
Fri, 16 Apr 2010 00:00:00 -0700
Sat, 27 Mar 1976 08:00:00 -0800
在我的瀏覽器,(因爲我的本地時區爲歐洲/柏林,CET,UTC + 1/2)擊中to local time
按鈕
Samstag, 17. April 2010 13:40:15
Freitag, 16. April 2010 09:00:00
Samstag, 27. März 1976 17:00:00
是的,但看到我的答案。如果服務器將Javascript的時間值按照本地時間格式*在服務器上*,那麼客戶端將看到服務器端時間。這可能是需要的,或者它可能不是;它取決於應用程序和時間值的含義。在任何情況下,這種方法都會產生與直接使用數字時間值的方法不同的結果。 – Pointy 2010-04-17 10:59:30
@Pointy:不確定在這種情況下,我是否理解你的擔憂。當然,價值取決於服務器的時鐘「思考」時間,即服務器的時鐘是錯誤的,這個值也是錯誤的。但我使用'gmdate()'和'DateTime :: W3C'作爲格式,即輸出看起來像是'2010-04-17T11:12:22 + 00:00',其中'+00:00'標記時區至少偏移量)。 Date.parse()識別偏移量並相應地處理該值。 – VolkerK 2010-04-17 11:13:19
在這種情況下,它確實會和使用「原始」時間值(數字「秒數」)具有相同的效果,所以我很抱歉沒有看到。 – Pointy 2010-04-17 11:19:34
後現在是2013年,隨着越來越多的人從在PHP端處理SQL結果轉換爲在JSON中傳遞結果並在客戶端進行處理,我認爲moment.js值得關注一點,因爲它提供了簡單的替換在Javascript中使用PHP的strtotime()和date()函數,再加上一些。
就包括:
<script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script>
然後,它的那麼容易,因爲:
// Simulates ajax response
var data = { someDate: "2023-08-23 11:52:39" }
// .unix() converts to Unix timestamp: 1692816759
moment(data.someDate).unix();
// Displaying it in a readable format
// Aug 23, 11:52 AM
moment("2023-08-23 11:52:39").format('MMM D, hh:mm A');
// Now
moment();
// Support for manipulation and chaining
moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0);
你可以得到這裏的速度5.5KB js文件:
這裏更多的文檔:
- 1. SQL Query - 從日期時間字段開始的平均時間
- 2. 將時間戳轉換爲可讀的日期/時間PHP
- 3. javascript - 時間計數器自開始日期和時間
- 4. 驗證日期,時間開始和時間用javascript結束
- 5. c# - 從當前日期開始的日期時間(持續時間)
- 6. 日期時間選擇器 - 設置開始日期和時間
- 7. 開始日期到結束日期之間的查找時間
- 8. 如何從正常運行時間開始日期和時間
- 9. 如何從日期時間戳的時間和日期在PHP
- 10. 獲取日期開始的時間戳
- 11. 計算從開始日期到完成日期的時間
- 12. 從日期時間開始的python日期
- 13. 將日期從一年的開始轉換爲日期時間
- 14. 多個「開始日期時間」和「結束日期時間」。生成的開始日期時間和結束日期時間
- 15. PHP日期時間更新時間離開日期不變
- 16. JavaScript的日期() - 日期,時間時鐘
- 17. 從時間()開始繪製日期(從matplotlib開始)
- 18. 將javascript日期時間轉換爲php日期時間
- 19. 當事件跨越多天時,將事件的標題從'開始時間 - 結束時間'更改爲'開始日期時間 - 結束日期時間'
- 20. 如何分配日期時間間隔和日期highchart開始
- 21. PHP MYSQL日期,時間,日期時間和時間戳
- 22. 從日期時間到日期沒有時間在PHP
- 23. 從日期開始獲取日期時間
- 24. 從日期/時間開始的日誌消息格式
- 25. php時間戳到可讀的日期不按預期工作
- 26. C++時間戳人類可讀的日期時間函數
- 27. PHP日期時間
- 28. Tomcat開始日期時間信息
- 29. JavaScript的日期和時間
- 30. 與javascript的日期時間
那Date.format方法是天賜之物!非常感謝:) – Lyon 2010-04-17 10:48:45
取而代之的是你可以只添加3個零: var now = new Date(<?php echo time();?> 000); – 2015-09-06 08:15:41