2010-04-17 110 views

回答

25

使用Date object做到這一點:

new Date(<?php echo time(); ?>*1000) 

您需要通過1000乘以Unix時間戳監守Date預計時間戳是毫秒。

而要格式化日期,您可以使用這個Date.format method日期沒有內置)。

+0

那Date.format方法是天賜之物!非常感謝:) – Lyon 2010-04-17 10:48:45

+1

取而代之的是你可以只添加3個零: var now = new Date(<?php echo time();?> 000); – 2015-09-06 08:15:41

2

你會想要非常小心的做這件事。如果服務器端時間值是傳統的「自」時代邊界「值起的秒數(或毫秒數),然後將其轉換爲某種」日期「對象,那麼轉換髮生在適合於上下文的區域設置。

當你使用你的網站得到了在夏威夷位於芝加哥的服務器,有人就會出現問題,說黨的「盧奧」事務—之一,毫無疑問,配有燒豬後基層掠過跳舞的女孩,在溫暖的熱帶天空下的罕見夜晚,充滿異國情調的鮮花,嗅着海洋的微風—現在已經晚了。我的天啊,差不多半夜了!當我爲她寫關於派對的文章時,母親會怎麼想?

我們派對的人在下午11:30坐下來使用您的網站。現在,當然,在夏威夷東部相當大的時候,你的服務器認爲它已經是凌晨5點30分了,而且日期比我們派對的人在他給媽媽的快速記錄中記下的日期晚了一天。因此,您的服務器將其時間值寫入網頁中,正如答案中所述,並且—正確—夏威夷當地時間顯示在我們的派對旅客房間的頁面上。

問題是這樣的:如果本地時間使它回到某種形式的現場應用程序,您的應用程序將其視爲本地時間在芝加哥,那麼你的網站將獲得昨天的日期。根據您的應用程序,它是確定或它的不正常 - 問題是,你必須保持的賽道,日期(普通日曆符號表示)來自面對面的人其中的日期爲使用

你當然可以有相反的問題。也就是說,如果你的服務器總是呈現日期在其本地時區,然後用戶在世界其他地方會看到混亂(顯然是錯誤的)日期和時間值,所以接口有明確什麼那些值的含義。當您的網站提供涉及時間安排的服如果有可能安排操作,這一點很重要的是,接口保持中上水平的東西,使「4月30日下午10點」是指在服務器要麼日期和時間或區域設置日期和時間,從時間表被安排。無論如何,你必須小心保持事物的一致性。

2

取而代之的是數字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 
+0

是的,但看到我的答案。如果服務器將Javascript的時間值按照本地時間格式*在服務器上*,那麼客戶端將看到服務器端時間。這可能是需要的,或者它可能不是;它取決於應用程序和時間值的含義。在任何情況下,這種方法都會產生與直接使用數字時間值的方法不同的結果。 – Pointy 2010-04-17 10:59:30

+0

@Pointy:不確定在這種情況下,我是否理解你的擔憂。當然,價值取決於服務器的時鐘「思考」時間,即服務器的時鐘是錯誤的,這個值也是錯誤的。但我使用'gmdate()'和'DateTime :: W3C'作爲格式,即輸出看起來像是'2010-04-17T11:12:22 + 00:00',其中'+00:00'標記時區至少偏移量)。 Date.parse()識別偏移量並相應地處理該值。 – VolkerK 2010-04-17 11:13:19

+0

在這種情況下,它確實會和使用「原始」時間值(數字「秒數」)具有相同的效果,所以我很抱歉沒有看到。 – Pointy 2010-04-17 11:19:34

0

後現在是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文件:

http://momentjs.com/

這裏更多的文檔:

http://momentjs.com/docs/

相關問題