🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

1336閲覧

VBScriptのDatepart関数の挙動が想定と異なる現象について

begin2016

総合スコア10

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/03/02 04:20

編集2021/03/20 07:25

概要

VBScriptで記載されたコードをJavaScriptに変換する作業をしているのですが、
そこで使用されている「Datepart()」関数の挙動が私が想定していた結果と異なっており、
調査をしても回答がネット上に見当たらなかったため質問させていただきます。

詳細

## 実行環境
paiza株式会社の下記のサイトを利用しています。
https://paiza.io/ja/projects/new

検証内容

Vb

1public class compiler 2 shared function Main as integer 3' Your code here! 4 Console.WriteLine(datepart("q",New DateTime(2021, 01, 01, 20, 30, 15))) 5 Console.WriteLine(datepart("q",New DateTime(2021, 02, 02, 20, 30, 15))) 6 Console.WriteLine(datepart("q",New DateTime(2021, 03, 01, 20, 30, 15))) 7 Console.WriteLine(datepart("q",New DateTime(2021, 04, 01, 20, 30, 15))) 8 Console.WriteLine(datepart("q",New DateTime(2021, 05, 01, 20, 30, 15))) 9 Console.WriteLine(datepart("q",New DateTime(2021, 06, 01, 20, 30, 15))) 10 Console.WriteLine(datepart("q",New DateTime(2021, 07, 01, 20, 30, 15))) 11 Console.WriteLine(datepart("q",New DateTime(2021, 08, 01, 20, 30, 15))) 12 Console.WriteLine(datepart("q",New DateTime(2021, 09, 01, 20, 30, 15))) 13 Console.WriteLine(datepart("q",New DateTime(2021, 10, 01, 20, 30, 15))) 14 Console.WriteLine(datepart("q",New DateTime(2021, 11, 01, 20, 30, 15))) 15 Console.WriteLine(datepart("q",New DateTime(2021, 12, 01, 20, 30, 15))) 16 return 0 17 End function 18end class

実行結果----------------------------------------------------------------
1
2
2
2
2
2
3
3
3
4
4
4


想定していた結果

Console.WriteLine(datepart("q",New DateTime(2021, 02, 02, 20, 30, 15))) '→1 Console.WriteLine(datepart("q",New DateTime(2021, 03, 01, 20, 30, 15))) '→1

参考サイト

上記のコードの実行結果は'1'となると思っていました。
この実行結果となる理由を教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ツール「Visual Studio」を使用しての動作確認(VB.net)もしましたが、
結果は、下記になりました。

vb.net

1 Console.WriteLine(DatePart("q", DateSerial(2021, 1, 1))) 2    '→1 3 Console.WriteLine(DatePart("q", DateSerial(2021, 2, 1))) 4    '→1 5 Console.WriteLine(DatePart("q", DateSerial(2021, 3, 1))) 6    '→1

環境依存ということはわかりましたが、
差異の原因は現時点だと不明のままです。

投稿2021/03/20 07:30

begin2016

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちゃんとした環境で実行せず、paizaで実行しての結果と言うことなら、paiza側の問題では?
ちゃんとした環境で実行しましょう。

投稿2021/03/02 04:57

otn

総合スコア85886

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

begin2016

2021/03/02 05:58

ご回答ありがとうございます。 paiza以外のオンライン実行環境においても、発生していたので、 実行環境による挙動の違いは無いのではないかと判断していましたが、 助言の通り、ローカル環境での実施をすることにします。 他サイト:https://www.onlinegdb.com/online_vb_compiler
otn

2021/03/02 07:29

手近にWindows環境がないのでしょうか?VBScriptだと、想定通りですね。 For i = 1 To 12 WScript.Echo i, Datepart("q",DateSerial(2021, i, 01)) Next
begin2016

2021/03/02 09:05

コードの提供ありがとうございます。 windows端末での実行においては、otnさんがおっしゃる通りの想定通りの挙動を確認しました。 実際にコードが実行される機器のタイムゾーンなのかはわかりませんが、挙動が変わることはわかりました。(※この可能性には期待できませんが、、、) 引き続き調査することにします。
otn

2021/03/02 09:09

時差は1日未満なので、関係ないですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問